comment fondez-vous un processus ssh?

Je sais que vous pouvez suspendre une session ssh avec ~ ^ z, mais existe-t-il également un moyen de l’arrière-plan pour que cela continue de fonctionner pendant que vous faites autre chose dans le shell local?

Si vous essayez d’exécuter un processus à distance et que vous ne vous souciez pas de garder la session SSH ouverte, vous pouvez utiliser l’ screen . Il vous permettra d’exécuter votre processus en “arrière-plan”, et continuera à fonctionner après votre déconnexion.

Commencez par ssh jusqu’à la boîte distante, puis utilisez l’ screen et démarrez votre processus. Vous pouvez également atsortingbuer un nom de session à votre screen si vous le souhaitez. Vous ne remarquerez rien de différent, mais démarrez votre processus dans cette session. Vous pouvez ensuite quitter la session d’ screen en utilisant la commande Ctrl-a d . Cela ressemblera à ceci:

 user@remotebox:~$ screen -S foobarsession user@remotebox:~$ startmyprocess [detached from 4865.foobarsession] user@remotebox:~$ 

Vous pouvez ensuite quitter votre session SSH et le processus continuera à s’exécuter. Pour vous reconnecter ultérieurement à la session screen , ssh retourne dans la boîte distante et utilisez screen -r pour vous reconnecter. Vous pouvez utiliser screen -ls pour lister les sessions.

 user@remotebox:~$ screen -ls There is a screen on: 4865.foobarsession (10/05/2012 11:10:57 AM) (Detached) 1 Socket in /var/run/screen/S-user user@remotebox:~$ screen -r foobarsession user@remotebox:~$ screen -ls 4865.foobarsession (10/05/2012 11:10:57 AM) (Attached) 1 Socket in /var/run/screen/S-user user@remotebox:~$ 

Ou, si screen n’est pas installé, vous pouvez utiliser la commande nohup sur le boîtier distant. Wikipedia explique bien cela:

 Nohupping backgrounded jobs is typically used to avoid terminating them when logging off from a remote SSH session. A different issue that often arises in this situation is that ssh is refusing to log off ("hangs"), since it refuses to lose any data from/to the background job(s). This problem can also be overcome by redirecting all three I/O streams: nohup ./myprogram > foo.out 2> foo.err < /dev/null & 

Pour que vous puissiez faire quelque chose comme:

 ssh -n -f user@remotebox "sh -c 'cd /foo/bar; nohup ./myprogram > foo.out 2> foo.err < /dev/null &'" 

Après ~ ^ z, exécutez bg et le processus arrêté continuera à s’exécuter en arrière-plan. Fonctionne avec tous les processus et pas seulement ssh.

PS: Avec fg vous mettez à nouveau le processus en arrière-plan au premier plan. Et juste pour le compte rendu: le ~ n’est nécessaire que pour distinguer si la suspension doit être sur la machine locale (avec ~ -> le client ssh) ou sur le serveur (sans ~ -> quel que soit le processus en cours d’exécution le serveur)