Skip to content

Ssh manip maintenir execution commande arret connexion

Maintenir l'exécution d'une ligne de commande après déconnexion SSH

Ce que l'on va faire ici

Nous allons voir ici comment maintenir l'exécution d'une commande lancée par SSH même après l'arrêt de la connexion SSH.

Dans quel cas ?

Typiquement, on se connecte par SSH pour réaliser des opérations sur un poste distant (un Pi, un VPS) à partir d'un poste fixe. Tant que l'on fait des opérations "à la volée", pas de problème particulier.

Mais imaginons que l'on veuille par exemple lancer un code de serveur "maison" en ligne de commande, sans avoir à installer un système graphique complet sur le poste distant ou parce que celui-ci n'est pas accessible à distance. Dans ce cas précis, il faut être en mesure de lancer le script voulu par SSH puis se déconnecter, le script continuant de s'exécuter.

Les situations potentielles seront l'éxécution sur le poste SSH : * d'un script de serveur web * d'un script de datalogging * d'un script d'accès aux entrées/sortie d'un Pi par exemple, * etc.

Cette approche pourra être particulièrement intéressante par exemple dans le cas de nano-pc ayant une configuration minimale (type Orange Pi Zéro) empêchant l'utilisation d'un système graphique en accès distant ou pour préserver les ressources matérielles inutilement utilisée par le système graphique.

Certains services sont prévus pour tourner de façon permanente

Dans le cas de "services système", tel qu'un serveur Apache ou ce genre de chose, la question ne se pose pas car cela va tourner en arrière-plan de façon permanente sur le poste distant sans qu'on est à s'en soucier. Par contre, dans le cas d'un script "maison" écrit en Python par exemple, il faut pouvoir lancer le script puis se déconnecter sans que cela ne stoppe le script.

Pré-requis

On présuppose ici que l'on a un script prêt à être exécuté sur le poste distant. Dans mon cas, j'utiliserai une webapp simple de monitoring randomisé. Au besoin, copier/coller au préalable le script ou la webapp voulu via accès SFTP via le gestionnaire de fichier Thunar.

Noter que l'on pourra tester au préalable que notre script fonctionne normalement en l'utilisant sur le poste fixe avant de le faire sur le poste distant.

La procédure

Ensuite, se connecter au serveur SSH :

ssh user@ip.du.serveur.ssh

Le truc consiste à lancer la commande avec :

nohup ./script.py &

Plus d'infos ici : https://unix.stackexchange.com/questions/479/keep-processes-running-after-ssh-session-disconnects

Exemple

Si on veut lancer un script bash qui s'appelle launch par exemple, on fera :

cd /repertoire/ou/se/trouve/le/script
nohup ./launch &

Lorsque l'on exécute la commande nohup, la sortie nous indique le numéro du processus. Le noter.

Comment stopper le processus ?

Pour stopper le processus, il suffit de se reconnecter en SSH puis de saisir la command top qui va donner la liste des processus en cours.

Si on n'a pas le numéro du processus, pour faire apparaître le processus qui nous concerne, rafraîchir navigateur par exemple. Le processus va se placer transitoirement au haut de la liste. Noter son numéro.

Taper k pour kill et saisir le numéro puis valider 2 fois.

L'autre façon, c'est la commande kill