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] 24651Ce numéro te servira plus tard pour surveiller ou arrêter le process:
kill 24651nohup 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:importSuivre les logs en direct:
tail -f output.logLa 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 importLancer ta commande dans la session:
./bin/console app:importPour détacher la session (la laisser tourner en fond), utilise la combinaison de touche
Ctrl + A puis D.Lister les sessions actives:
screen -lsRevenir dans la session:
screen -r importQuitter définitivement une session:
exitTu 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.