Comment garder un script actif après déconnexion SSH?

Auteur(s) de l'article

Un mémo personnel, mais qui peut servir à d'autres.
Situation classique: tu te connectes en SSH sur un serveur distant pour lancer un script qui va tourner longtemps. Import de données, migration, traitement de fichiers, etc. Si tu fermes ton terminal ou que ta connexion coupe, le process meurt avec la session. Voici deux outils pour éviter ça.

nohup: la solution rapide

nohup est disponible sur pratiquement toutes les distributions Linux. Il lance un process en ignorant le signal de déconnexion (SIGHUP), ce qui lui permet de survivre à la fermeture de la session SSH.
Voici comment lancer votre script:
nohup ./bin/console app:import &


Le & à la fin lance le process en arrière-plan. Sans lui, ton shell serait bloqué jusqu'à la fin du script (ou un `Ctrl+C`). Avec, tu récupères la main immédiatement et le shell affiche le PID:
[1] 24651
Ce numéro te servira plus tard pour surveiller ou arrêter le process:
kill 24651
nohup empêche la mort à la déconnexion, & te rend la main. Les deux ensemble forment la combinaison standard.
C'est tout. Tu fermes ton terminal, le script continue. Tu peux revenir plus tard consulter le fichier de log.
Pour rediriger les logs:
nohup ./bin/console app:import > output.log 2>&1 &
Vérifier que ça tourne:
ps aux | grep app:import
Suivre les logs en direct:
tail -f output.log
La limite: tu ne peux pas reprendre la session. Pas d'interactivité, pas de terminal récupérable.

screen: la session persistante

screen est aussi présent sur la quasi-totalité des serveurs Linux. Il crée un terminal virtuel qui tourne indépendamment de ta connexion SSH. Tu peux t'y reconnecter plus tard comme si tu n'étais jamais parti.
Créer une session nommée:
screen -S import
Lancer ta commande dans la session:
./bin/console app:import
Pour détacher la session (la laisser tourner en fond), utilise la combinaison de touche Ctrl + A puis D.
Lister les sessions actives:
screen -ls
Revenir dans la session:
screen -r import
Quitter définitivement une session:
exit
Tu vois tout en direct quand tu es connecté, et la progression est toujours là quand tu reviens. C'est l'outil idéal pour surveiller un long processus ou débugger à distance.
Pour aller plus loin: tmux est le successeur moderne de screen, avec plus de fonctionnalités. Mais screen et nohup ont l'avantage d'être présents partout sans installation.