nohup commande &, c'est tout ce qu'il faut taper pour qu'une commande survive à votre déconnexion SSH. Quand le terminal se ferme, votre shell reçoit le signal SIGHUP et le relaie à ses tâches, qui se terminent. nohup fait ignorer ce signal à la commande, et redirige sa sortie loin du terminal disparu. Les comportements décrits ici ont été mesurés sur Debian 13, Ubuntu 24.04 et AlmaLinux 10, en fermant réellement le terminal d'un Bash interactif.
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 ? »nohup répond à un besoin précis : lancer une tâche longue sur une machine distante et couper la connexion sans la tuer. Les trois situations ci-dessous partagent le même point commun, un processus dont la durée dépasse celle de votre session. Si à l'inverse vous avez besoin de revoir la sortie en direct après reconnexion, ou de reprendre la main sur le programme, nohup ne suffit pas et c'est tmux qu'il vous faut, comparé en fin de guide.
- 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 terminal disparaît et le noyau envoie SIGHUP (signal 1, hang up) au shell, qui le relaie à ses tâches avant de quitter. Par défaut, la plupart des commandes réagissent à SIGHUP en se terminant. Mesuré en fermant le terminal d'un Bash interactif, à l'identique sur les trois distributions :
| Lancement | Après la fermeture du terminal |
|---|---|
sleep 600 & | mort |
sleep 600 > log 2>&1 & | mort : rediriger la sortie ne protège pas |
nohup sleep 600 > log 2>&1 & | vivant |
sleep 600 & puis disown | vivant |
nohup sleep 600 au premier plan, sans & | vivant, mais le terminal était bloqué |
Pour reproduire l'effet sans vous déconnecter, envoyez le signal vous-même au processus dont vous avez noté le PID :
kill -HUP "$PID"nohup contourne ce mécanisme en configurant l'ignorance de SIGHUP avant d'exécuter la commande. Une seule exception à connaître : si l'administrateur a réglé KillUserProcesses=yes dans /etc/systemd/logind.conf, systemd tue tous les processus de la session à la déconnexion, nohup compris. Les trois distributions livrent la valeur par défaut no (ligne #KillUserProcesses=no, relevée dans le fichier).
Syntaxe de base
Section intitulée « Syntaxe de base »La forme à mémoriser tient en deux éléments qui jouent des rôles distincts et complémentaires : nohup détache la commande du signal SIGHUP, et & la renvoie en arrière-plan pour vous rendre la main. L'oubli le plus courant est de taper nohup commande sans le & : la commande ignore bien SIGHUP, mais elle occupe votre terminal, et vous ne pouvez plus rien y faire jusqu'à la fin. Notez la variable $! juste après le lancement, elle contient le PID du dernier processus mis en arrière-plan, votre seul moyen fiable de le retrouver ensuite.
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, et le signale (message relevé en locale C) :
cd ~nohup mon-script.sh &# nohup: ignoring input and appending output to 'nohup.out'ls -la nohup.outtail -f nohup.out # surveiller la progressionSi le répertoire courant n'est pas accessible en écriture, nohup se replie sur $HOME/nohup.out et l'annonce : mesuré, un utilisateur placé dans un répertoire de root obtient appending output to '/home/testeur/nohup.out'.
Redirection 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 vous voulez en plus que la tâche disparaisse de
jobs, pour ne plus la confondre avec les suivantes.
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 : jobs ne montre rien. Retrouvez le processus par son nom avec pgrep, qui ne compare que les 15 premiers caractères du nom ; pour un script au nom long, cherchez dans la ligne de commande complète avec pgrep -f.
# 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 | La sortie reste dirigée vers le terminal fermé si elle n'a pas été redirigée |
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 »Presque tous les ennuis avec nohup tournent autour de deux oublis : le & manquant, qui fige le terminal, et la redirection absente, qui éparpille des nohup.out dans le répertoire de lancement. Le tableau ci-dessous part du symptôme observé, car c'est ce que vous voyez en premier ; dans chaque cas, la vraie cause est presque toujours l'un de ces deux réflexes non pris. Retenez que nohup.out est écrit dans le répertoire courant au moment du lancement, pas là où le script travaille ensuite.
| 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 |
Le terminal reste bloqué après nohup commande | & oublié : la commande tourne au premier plan (elle survit pourtant à la déconnexion, mesuré) | Ctrl+Z puis bg, ou relancer avec nohup commande & |
La tâche meurt malgré nohup | KillUserProcesses=yes dans /etc/systemd/logind.conf | Vérifier ce réglage, ou lancer la tâche comme service |
| 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 »nohupfait ignorer SIGHUP : la commande ne se termine plus à la déconnexion SSH, là où un simple&meurt (mesuré).- Sans redirection, la sortie part dans
nohup.out, ou dans$HOME/nohup.outsi le répertoire courant est protégé. - 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.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Comprendre pourquoi un processus tourne (witr)
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications