Comment exécuter un script via SSH qui ne se termine pas lorsque je ferme la connexion?

18

J'ai besoin d'exécuter un script, qui prend beaucoup de temps à exécuter, ou je veux juste qu'il s'exécute pour toujours. Je ne peux pas simplement SSH sur ma machine, car lorsque je me déconnecte, elle cesse de fonctionner.

Existe-t-il un moyen d'exécuter un script qui ne dépend pas du shell qui l'a démarré?

J'utilise Ubuntu 9.04.

Jakub Arnold
la source

Réponses:

24

Vous pouvez exécuter la commande avec la commande nohup avant elle. Vous pouvez également l'exécuter dans 'écran', ce qui vous permettra de rattacher le terminal.

Par exemple:

ssh mySever 'nohup bash myscript.sh'

Ou tout simplement ssh dans et exécutez la commande nohup. Il devrait continuer à fonctionner même lorsque vous vous déconnectez. En effet, le nohup interceptera le chant SIGHUP (raccrochage).

L'écran est un peu plus impliqué, mais pendant les 20 minutes qu'il vous faudra peut-être pour apprendre les bases, c'est l'un des outils les plus utiles. Voici un tutoriel .

Kyle Brandt
la source
Sniped by Kyle ...> smile <
Evan Anderson
+1 à tous ceux qui snipent Evan. Happy 10K :)
squillman
1
le lien vers le tutoriel est rompu :(
Ido Ran
7

J'utilise toujours juste nohup. Si je me soucie de la sortie, je la redirige vers un fichier journal, sinon je l'envoie à / dev / null.

Exemple:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Cela le met en arrière-plan, avec une sortie allant à / dev / null, et il est immunisé contre le signal HUP si vous vous déconnectez. Vous pouvez également "renier" le travail avec certains shells (comme bash) afin qu'il ne soit pas connecté à votre session.

disown %1
m0j0
la source
1
+1 pour désavoué - très utile lorsque vous oubliez de courir avec nohup
Mark
5

Pour installer l'écran: apt-get install screen

Lancez ensuite en utilisant simplement: screen

Et man screenpour obtenir la liaison de clé.

Disco
la source
+1! l'écran est une chose da!
Javier
J'ai utilisé l'écran, mais je suis passé à tmux pour diverses raisons. Google "tmux vs screen" et vous trouverez des liens comme celui-ci: superuser.com/questions/236158/tmux-vs-screen
m0j0
2

Pendant que vous êtes connecté à un serveur, vous pouvez exécuter un script en mode détaché par la commande suivante:

nohup script >script.out 2>script.err &

Plus tard, lorsque vous vous reconnecterez, vous pourrez vérifier script.out pour toute sortie et script.err pour tout message d'erreur. Si vous souhaitez que les messages de sortie et d'erreur soient dans le même fichier, procédez comme suit:

nohup script >script.out 2>&1 &
Michael Dillon
la source