Contexte : vous souhaitez lancer un programme sur un linux distant (serveur privé / VM) accessible depuis SSH. Or, vous savez que ce programme peut prendre un peu de temps pour s'executer et vous souhaitez vous déconnecter du serveur, soit parce que vous devez éteindre l'ordinateur Client, soit parce que votre connexion internet est instable.
La solution à ce problème est de faire tourner l'application en tâche de fond. C'est déjà ce qu'il se passe pour beaucoup d'application (tout ce qui tourne à travers les services par exemple).
1. L'application screen
screen permet de créer une session qui peut être partagé d'un accès SSH à un autre.
1.1 Lancer screen
Executer cette commande :
1.1.1 Créer une nouvelle session
screen -S nom_de_la_session
1.1.2 Lancer une commande
Ceci ouvre une nouvelle session, on peut y taper une commande synchrone ou non :
sleep 4555555;
1.1.3 Quitter la session
Il y a plusieurs moyens de quitter la session dont voici les deux principaux :
- cltr+a suivi de la touche d
- fermer le terminal
1.1.4 Afficher les sessions screen
Lancer cette commande pour voir tous les screens :
screen -list
1.1.5 Revenir à la session
Se reconnecter au serveur, puis taper cette commande
screen -r nom_de_la_session
📖️️Source: https://doc.ubuntu-fr.org/screen
2. L'application nohup
Le nohup combiné au symbole & permet d'avoir un effet similaire : une tâche est executée en arrière plan indépendante de la déconnexion de l'utilisateur. Elle continuera de tourner même si l'utilisateur se déconnecte, volontairement ou non.
Le problème étant que si la tâche lancée fait un stdout pendant son traitement (à travers plusieurs echo par exemple), on ne peut plus les voir simplement (il faut alors redigirer cette sortie sur un fichier afin d'y avoir accès). En utilisant screen, on évite de faire une redirection dans un fichier car on peut revenir "dans l'execution" de la tâche.
nohup mon_programme &