nohup commande & — c’est tout ce qu’il faut taper pour qu’une commande survive à votre déconnexion SSH. Sans nohup, Linux envoie SIGHUP à tous les processus de la session quand le terminal se ferme, et ils se terminent. nohup bloque ce signal.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre pourquoi un processus meurt à la déconnexion (SIGHUP)
- Lancer une commande avec
nohupet& - Rediriger stdout et stderr vers un fichier de log dédié
- Combiner
nohupavecdisownpour une protection maximale - Retrouver le processus après reconnexion avec
pgrepoups
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »- Vous lancez une sauvegarde, une compilation, un transfert de données via SSH.
- Vous ne pouvez pas ou ne voulez pas laisser le terminal ouvert.
- Vous n’avez pas tmux disponible sur la machine distante.
Pourquoi les processus meurent à la déconnexion
Section intitulée « Pourquoi les processus meurent à la déconnexion »Quand vous vous déconnectez d’une session SSH, le shell reçoit le signal SIGHUP (signal 1 — hang up). Il le propage à l’ensemble des processus de la session. Par défaut, la plupart des commandes réagissent à SIGHUP en se terminant.
# Simuler ce qui se passe : envoyer SIGHUP manuellementkill -HUP $PIDnohup contourne ce mécanisme en configurant l’ignorance de SIGHUP avant d’exécuter la commande.
Syntaxe de base
Section intitulée « Syntaxe de base »nohup commande arguments &nohup: configure l’ignorance de SIGHUP puis exécute la commande&: place le processus en arrière-plan (indispensable — sans&,nohupbloque le terminal)
# Exemple concretnohup rsync -avz /data/ user@serveur:/backup/ &echo "Sauvegarde lancée, PID=$!"Le fichier nohup.out
Section intitulée « Le fichier nohup.out »Si vous ne redirigez pas la sortie, nohup crée automatiquement un fichier nohup.out dans le répertoire courant pour capturer stdout :
cd /home/bobnohup mon-script.sh &# --> nohup : l'entrée standard est ignorée, la sortie est ajoutée à 'nohup.out'ls -la nohup.outtail -f nohup.out # surveiller la progressionRedirection explicite (recommandé)
Section intitulée « Redirection explicite (recommandé) »La bonne pratique est de spécifier vous-même le fichier de log :
nohup mon-script.sh > /var/log/mon-script.log 2>&1 &PID=$!echo "PID=$PID, logs dans /var/log/mon-script.log"> fichier.log: redirige stdout2>&1: redirige stderr vers le même fichier- Quand vous redirigez explicitement,
nohup.outn’est pas créé
Pour suivre l’avancement en temps réel depuis une autre connexion :
tail -f /var/log/mon-script.logCombiner nohup et disown
Section intitulée « Combiner nohup et disown »nohup protège contre SIGHUP. disown retire la tâche de la table de jobs du shell. Combinés, ils offrent la protection maximale :
nohup ma-commande > sortie.log 2>&1 &PID=$!disown $PIDecho "Tâche $PID lancée, protégée contre HUP et détachée du shell"Quand utiliser la combinaison ?
- Quand vous travaillez dans un shell interactif et que vous ne voulez aucun risque de fin prématurée.
- Quand des scripts côté serveur redémarrent les sessions automatiquement.
Retrouver un processus nohup après reconnexion
Section intitulée « Retrouver un processus nohup après reconnexion »Après déconnexion et reconnexion, votre nouveau shell n’a aucune mémoire des tâches précédentes. Retrouvez le processus avec :
# Par nom de commandepgrep -a mon-scriptpgrep -u bob rsync
# Par PID (si vous l'avez noté)ps -p 1234 -o pid,stat,comm,etime
# Lire les logstail -f /var/log/mon-script.logRécapitulatif : nohup vs disown vs tmux
Section intitulée « Récapitulatif : nohup vs disown vs tmux »| Outil | Quand l’utiliser | Avantage | Limite |
|---|---|---|---|
nohup commande & | Tâche simple, connexion unique | Une commande suffit | Pas d’interactivité possible après |
disown -h $PID | Commande déjà lancée sans nohup | Rattrapage après le fait | Moins robuste que nohup |
nohup ... & ; disown $! | Protection maximale | Immunisé SIGHUP et détaché | Pas de reprise interactive |
tmux | Session interactive, suivi en direct | Reconnexion complète possible | Nécessite tmux installé |
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
nohup.out absent alors que la tâche tourne | Sortie redirigée explicitement | Normal — cherchez votre fichier de log |
nohup.out dans le mauvais dossier | nohup crée le fichier dans $PWD au moment du lancement | Toujours spécifier un chemin absolu en redirection |
| La commande se termine quand même à la déconnexion | Vous avez oublié & — nohup a bloqué le terminal | Relancer avec nohup commande & |
| Impossible de retrouver le processus après reconnexion | PID non noté, commande trop générique | Toujours noter le PID ou utiliser une commande avec un nom unique |
Deux nohup.out qui se mélangent | Deux tâches nohup dans le même répertoire sans redirection | Utiliser des fichiers de log distincts pour chaque tâche |
À retenir
Section intitulée « À retenir »nohupintercepte SIGHUP : la commande ne se termine plus à la déconnexion SSH.- Ajoutez toujours
&— sans lui,nohupbloque votre terminal. - Redirigez explicitement vers un fichier de log :
nohup commande > mon.log 2>&1 & - Combinez avec
disown $!pour une protection complète. - Notez le PID ou utilisez un nom de log explicite pour retrouver la tâche après reconnexion.