GNU/Linux >> Tutoriels Linux >  >> Linux

Empêcher la tâche Linux en cours d'exécution d'être tuée après la déconnexion de SSH

Si votre tâche est déjà lancée, il est trop tard* envisager des solutions alternatives qui insèrent une couche supplémentaire entre vos ssh session et le shell exécutant la commande, comme screen , tmux , byobu , nohup et les goûts.

Si votre processus supporte d'être placé en arrière-plan et surtout ne se bloque pas lorsque stdout et stderr sont non inscriptibles/fermés, vous pouvez les mettre en arrière-plan avant de vous déconnecter avec Control Z et bg puis détachez-le de votre coque avec le disown intégré.

ex :

$ ssh localhost
You have new mail.
Last login: Fri Jun  6 11:26:56 2014

$ /bin/sleep 3600    


^Z[1] + Stopped                  /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] +  Running                 /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864     1  0 21:12 ?        00:00:00 /bin/sleep 3600
jlliagre 13056 12477  0 21:13 pts/18   00:00:00 grep sleep
$ 

* Comme Bob l'a commenté, il existe en fait plusieurs façons de renommer une session tty sous Linux. repty, retty, injcode et neercs. Le plus avancé semble être reptyr, mais vous aurez peut-être besoin des privilèges root pour permettre à ptrace de pirater votre processus.


Une solution consiste à utiliser l'écran GNU. Vous pouvez démarrer screen , lancez votre commande, puis détachez avec C-a d . Plus tard, pour vous reconnecter, faites screen -r , et vous êtes de retour dans votre session précédente.

Les autres avantages de l'écran sont la gestion des fenêtres (vous pouvez donc basculer vers d'autres shells pendant que votre commande est en cours d'exécution, sans avoir besoin d'une nouvelle connexion SSH), et cela permet à votre commande de rester au premier plan, que ce soit dans la session en cours ou dans une session ultérieure.

Modifier : Comme indiqué dans les commentaires, cela ne fonctionnera que si vous vous souvenez de commencer screen avant d'exécuter la commande. Si la commande est déjà en cours d'exécution, vous aurez besoin de la solution de @jlliagre.


Linux
  1. Commande SCP Linux - Comment transférer un fichier SSH de distant à local

  2. Comment SSH sur Linux à partir d'Android

  3. Empêcher Tmux de démarrer sur Ssh ?

  4. exécuter la commande sudo sur linux à partir de plink.exe[windows]

  5. Commande Linux pour attendre qu'un serveur SSH soit opérationnel

Programmer le matériel à partir de la ligne de commande Linux

Comment supprimer une commande de l'historique sous Linux

Comment transmettre un mot de passe à la commande SSH sous Linux

12 choses à faire après l'installation d'un serveur Linux

Le processus exécuté en arrière-plan a été tué sous Linux

Maintenir un processus Linux en cours d'exécution après ma déconnexion