Je sais que vous pouvez suspendre une session ssh avec ~^z, mais existe-t-il également un moyen de la mettre en arrière-plan afin qu'elle continue de fonctionner pendant que vous faites autre chose dans le Shell local ?
Réponses
Trop de publicités?Si vous essayez d'exécuter un processus à distance, et que vous ne vous souciez pas de maintenir la session ssh ouverte, vous pouvez envisager d'utiliser l'option screen
. Il vous permettra d'exécuter votre processus en "arrière-plan", et il continuera à fonctionner après votre déconnexion.
D'abord, ssh
vers le boîtier de télécommande, puis de là, utilisez screen
et commencer votre processus, et vous pouvez donner votre screen
un nom de session si vous le souhaitez. Vous ne remarquerez pas vraiment de différence, mais lancez votre processus dans cette session. Vous pouvez ensuite sortir de la session screen
en utilisant la commande Ctrl-a d
. Cela ressemblera à quelque chose comme ceci :
user@remotebox:~$ screen -S foobarsession
user@remotebox:~$ startmyprocess
[detached from 4865.foobarsession]
user@remotebox:~$
Vous pouvez alors quitter votre session ssh, et le processus continuera à fonctionner. Pour vous reconnecter au screen
plus tard, connectez-vous à nouveau à la boîte distante et utilisez la fonction screen -r
pour se 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 l'option nohup
sur le boîtier de télécommande. 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 &
Vous pourriez donc 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 l'exécution de ~^z bg
et le processus arrêté continuera à s'exécuter en arrière-plan. Fonctionne avec tous les processus, pas seulement ssh.
P.S. : Avec fg
vous mettez à nouveau au premier plan le processus en arrière-plan. Et juste pour info : Le ~ est seulement nécessaire 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 au premier plan sur le serveur).