Exécution à distance
Contexte
Vous savez vous connecter via SSH sur une machine et donc faire tourner un programme sur cette machine.
Comme vu précédemment, toute fermeture de la session SSH fermera tous les programmes lancés par cette session. Il est certains cas où cela n'est pas désirable:
- lancer des calculs en tâche de fond pour la nuit et se reconnecter
- lancer un programme qui doit rester actif en cas de perte de connexion (WiFi par exemple)
Fort heureusement, la plupart des systèmes Linux/Unix nous offrent des outils pour contourner ce problème.
nohup
nohup
est un utilitaire très simple qui prend en argument une ligne de commande et fait en sorte que les signaux de déconnexion ne terminent pas le programme ainsi lancé
Le souci principal de cette commande est la complexité pour reprendre le contrôle sur le programme ainsi lancé.
Le second souci de cette commande avec SSH est que la session SSH restera active tant que les fichiers spéciaux stdout
et stderr
seront utilisés par un programme (lancé par SSH) se trouvant en arrière plan. Il faudra donc le plus souvent écrire:
-
si les messages du programme ne vous intéressent pas:
-
si les messages vous intéressent:
tmux
Le programme tmux
est un multiplexeur de terminal, permettant de créer plusieurs fenêtres virtuelles dans un seul terminal, passer des programmes en arrière-plan, les attacher à d'autres fenêtres virtuelles, etc...
Une aide assez détaillée de tmux
est disponible ici.
Warning
La syntaxe de tmux a changé au cours du temps, nous donnons ici la syntaxe pour la version 3.3 (la plus récente à ce jour).
Une des possibilités intéressante de tmux
est la possibilité de créer une session, lancer des programmes, fermer la session en laissant les programmes actifs et se reconnecter à la session plus tard. Pour notre cas d'usage ci-dessus:
ssh foo@host
tmux
python program.py
# puis taper ctrl+b suivi de d
# à partir d'ici votre session tmux est détachée
#=> vous pouvez fermer votre connexion ssh
logout
ssh foo@robot
tmux attach
Il est aussi possible de créer votre session en état détaché via -d
, tmux
quittera immédiatement. Si vous passez une ligne de commande à exécuter, tmux
lancera la commande et quittera:
tmux new -d ./programme
#nous sommes sorti tout de suite de tmux
#nous pouvons retourner dans la session via `tmux attach`
Vous pouvez créer plusieurs sessions si besoin, et vous reconnecter à une session en particulier (ici masession
). Les sessions peuvent être très utile si vous êtes plusieurs à accéder à la même machine avec le même login.
Vous pourrez vous reconnecter à cette session via
Vous pouvez vous connecter à une session en la créant si non existante. L'option -A
indique de faire attach
au lieu de new
si la session désirée existe déjà.
Pour voir les sessions actives:
Pour voir terminer une session active:
Combiné à SSH, cela vous permet de lancer rapidement des programmes tournant en tache de fond:
Vous pouvez combiner tmux
avec votre configuration SSH pour toujours démarrer votre session avec une session tmux
, comme expliqué ici:
Ceci indique à SSH de lancer tmux
en l'attachant à la dernière session lancée pour chaque connexion à cible.enst.fr
.
Info
Une autre fonctionnalité intéressante de tmux
est qu'il vous permet d'inviter d'autres personnes dans un terminal: vous pouvez ainsi travailler à plusieurs dans un même terminal depuis différentes machines !