9 votes

comment mettre en arrière-plan un processus ssh ?

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 ?

12voto

tpow Points 301

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 &'"

9voto

Khalil Points 11

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).

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