Aller au contenu
Administration Linux medium

Utiliser nohup pour maintenir un processus actif

6 min de lecture

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.

  • Comprendre pourquoi un processus meurt à la déconnexion (SIGHUP)
  • Lancer une commande avec nohup et &
  • Rediriger stdout et stderr vers un fichier de log dédié
  • Combiner nohup avec disown pour une protection maximale
  • Retrouver le processus après reconnexion avec pgrep ou ps
  • 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.

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.

Fenêtre de terminal
# Simuler ce qui se passe : envoyer SIGHUP manuellement
kill -HUP $PID

nohup contourne ce mécanisme en configurant l’ignorance de SIGHUP avant d’exécuter la commande.

Fenêtre de terminal
nohup commande arguments &
  • nohup : configure l’ignorance de SIGHUP puis exécute la commande
  • & : place le processus en arrière-plan (indispensable — sans &, nohup bloque le terminal)
Fenêtre de terminal
# Exemple concret
nohup rsync -avz /data/ user@serveur:/backup/ &
echo "Sauvegarde lancée, PID=$!"

Si vous ne redirigez pas la sortie, nohup crée automatiquement un fichier nohup.out dans le répertoire courant pour capturer stdout :

Fenêtre de terminal
cd /home/bob
nohup mon-script.sh &
# --> nohup : l'entrée standard est ignorée, la sortie est ajoutée à 'nohup.out'
ls -la nohup.out
tail -f nohup.out # surveiller la progression

La bonne pratique est de spécifier vous-même le fichier de log :

Fenêtre de terminal
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 stdout
  • 2>&1 : redirige stderr vers le même fichier
  • Quand vous redirigez explicitement, nohup.out n’est pas créé

Pour suivre l’avancement en temps réel depuis une autre connexion :

Fenêtre de terminal
tail -f /var/log/mon-script.log

nohup protège contre SIGHUP. disown retire la tâche de la table de jobs du shell. Combinés, ils offrent la protection maximale :

Fenêtre de terminal
nohup ma-commande > sortie.log 2>&1 &
PID=$!
disown $PID
echo "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.

Après déconnexion et reconnexion, votre nouveau shell n’a aucune mémoire des tâches précédentes. Retrouvez le processus avec :

Fenêtre de terminal
# Par nom de commande
pgrep -a mon-script
pgrep -u bob rsync
# Par PID (si vous l'avez noté)
ps -p 1234 -o pid,stat,comm,etime
# Lire les logs
tail -f /var/log/mon-script.log
OutilQuand l’utiliserAvantageLimite
nohup commande &Tâche simple, connexion uniqueUne commande suffitPas d’interactivité possible après
disown -h $PIDCommande déjà lancée sans nohupRattrapage après le faitMoins robuste que nohup
nohup ... & ; disown $!Protection maximaleImmunisé SIGHUP et détachéPas de reprise interactive
tmuxSession interactive, suivi en directReconnexion complète possibleNécessite tmux installé
SymptômeCause probableSolution
nohup.out absent alors que la tâche tourneSortie redirigée explicitementNormal — cherchez votre fichier de log
nohup.out dans le mauvais dossiernohup crée le fichier dans $PWD au moment du lancementToujours spécifier un chemin absolu en redirection
La commande se termine quand même à la déconnexionVous avez oublié &nohup a bloqué le terminalRelancer avec nohup commande &
Impossible de retrouver le processus après reconnexionPID non noté, commande trop génériqueToujours noter le PID ou utiliser une commande avec un nom unique
Deux nohup.out qui se mélangentDeux tâches nohup dans le même répertoire sans redirectionUtiliser des fichiers de log distincts pour chaque tâche
  • nohup intercepte SIGHUP : la commande ne se termine plus à la déconnexion SSH.
  • Ajoutez toujours & — sans lui, nohup bloque 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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn