2012-07-29 02:04:52 +0000 2012-07-29 02:04:52 +0000
82
82

Comment exécuter une commande en écran et détacher ?

Comment puis-je faire en sorte que screen exécute une commande puis se détache (c'est-à-dire automatiquement dans un seul script sans autre saisie que le démarrage initial du script) ? Par exemple, je lance myscript.sh et il démarre automatiquement une session screen, exécute une commande, puis se détache.

Réponses (5)

120
120
120
2012-07-29 02:20:11 +0000

C'est une question facile :

screen -d -m yourcommand
49
49
49
2012-07-29 02:10:53 +0000

Pour exécuter une commande unique en écran et détacher, vous pouvez essayer :

screen -dm sleep 10

Pour exécuter plusieurs commandes, essayez :

screen -dm bash -c "sleep 10; myscript.sh"

Veuillez noter que lorsqu'un programme se termine, screen (par défaut) tue la fenêtre qui le contenait.

Si vous ne voulez pas que votre session soit tuée après la fin du script, ajoutez exec sh à la fin, par exemple :

screen -dm bash -c 'sleep 5; exec sh'

Pour lister toutes vos sessions, essayez :

screen -list

connexes : Démarrer l'écran Unix, Exécuter la commande, Détacher .

16
16
16
2016-11-06 08:03:26 +0000

Pour démarrer une nouvelle session en arrière-plan avec le nom “sleepy”

screen -S sleepy -dm sleep 60

Pour tuer la session “sleepy”

screen -S sleepy -X quit
```.
3
3
3
2018-03-14 05:40:50 +0000
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
0
0
0
2019-04-29 09:38:39 +0000

ça m'est arrivé quand j'ai appuyé sur control c (sig int) pour sortir de mon programme. ça sort de toutes les bases. alors j'ai trouvé ça pour attraper SIGINT. et empêcher la sortie de la dernière base. (il faut taper exit pour sortir)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"

example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ; bash"

Je trouve utile d'utiliser cron pour exécuter les programmes nodejs au démarrage et pour faire tourner l'écran au démarrage. Dans cron, il y a une syntaxe d'événements spéciaux @reboot event

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"