27 votes

Exécuter un programme avec GNU screen et le détacher immédiatement après

J'essaie de comprendre comment écrire un script qui lancerait le(s) programme(s) dans les sessions GNU Screen au démarrage du système. J'essaie ceci :

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

mais la commande ne peut être exécutée car la session est déjà détachée ? La seule chose dont j'ai besoin est d'exécuter la commande dans la session écran et de détacher cette session immédiatement.

Merci pour les réponses, mais maintenant je suis confronté à un autre problème. script s'arrête de fonctionner après que j'ai mis quelques variables pour mon "programme et programme2". Quelque chose comme ceci :

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

pour une raison quelconque, "-f config.cfg" a été ignoré. J'ai également essayé de citer la commande et cela n'a pas aidé non plus.

34voto

Darmen Amanbayev Points 243

Tu voulais vraiment mettre le \ au bout de la ligne ? Si ce n'est pas le cas, essayez de les supprimer - ils permettent d'échapper au caractère suivant.

également, en laissant tomber le -X aide la configuration à fonctionner pour moi, par exemple :

screen -S test -d -m -X touch /tmp/test

échoue avec No screen session found Cependant :

screen -S test -d -m touch /tmp/test

fonctionne bien. En conséquence, je pense que la solution suivante vous conviendra :

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

N'oubliez pas que si vous exécutez cette commande au démarrage, $HOME n'est pas le même qu'après avoir ouvert une session avec un utilisateur spécifique. Si vous avez besoin de l'exécuter en tant qu'utilisateur spécifique, vous devrez utiliser des outils tels que su pour l'exécuter en tant que cet utilisateur, et spécifier le chemin complet lèvera toute ambiguïté :

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

Ou bien, vous appelleriez l'ensemble du script ci-dessus en tant que su - username /path/to/your/script .

4voto

Peter Eisentraut Points 7030

Comme Cry Havok l'a mentionné, vous pouvez placer le programme directement sur la ligne de commande.

Si vous devez vraiment utiliser l'option -X, alors a) vous devez spécifier la commande 'screen' et b) la session doit exister au préalable.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X