Comment utiliser la commande nohup sous Linux

Comment utiliser la commande nohup sous Linux

La commande no hang up ou nohup permet aux processus de votre système Linux de continuer à s’exécuter même après la fermeture du terminal. C’est essentiel pour les administrateurs système, car cela permet d’éviter que des tâches de longue durée, comme des processus de build ou la surveillance, ne soient interrompues.

L’utilisation de la commande nohup est simple : saisissez-la dans le terminal de votre système, suivie du processus que vous souhaitez exécuter en continu. Au-delà de l’utilisation de base, vous pouvez l’utiliser pour exécuter des tâches en arrière-plan et rediriger la sortie vers un fichier spécifique.

Dans cet article, nous aborderons plus en détail l’utilisation de la commande nohup, ainsi que ses applications concrètes.

Que fait la commande nohup ?

Linux envoie le signal « hang-up » (SIGHUP) pour terminer tous les processus du shell lorsque vous fermez le terminal. Cela peut également se produire sur un système distant en raison de problèmes de connectivité.

Pour redémarrer les processus, vous devez ressaisir manuellement les commandes Linux ou les scripts. Cela peut être fastidieux et chronophage s’il y a de nombreuses tâches de longue durée.

La commande nohup empêche les processus de recevoir le signal SIGHUP, les maintenant en cours d’exécution même après la fermeture du terminal.

Quels sont les cas d’usage de nohup ?

La commande nohup est utile pour assurer l’exécution continue de tâches. Voici quelques exemples de cas d’usage courants pour les administrateurs système et les développeurs :

  • Maintenir des processus de longue durée. Les tâches de longue durée, comme le traitement de données ou les builds logiciels, prennent énormément de temps et nécessitent un redémarrage complet lorsqu’elles sont interrompues. La commande nohup les empêche de s’arrêter après une fermeture de session ou une déconnexion SSH. 
  • Maintenance du serveur. L’utilisation de nohup permet aux scripts de maintenance du serveur – comme la rotation des journaux, les mises à jour ou les tâches de nettoyage – de s’exécuter indépendamment de la session d’un administrateur. Cela permet au système de fonctionner de manière fiable. 
  • Sauvegardes automatiques en cours. Vous pouvez utiliser nohup pour exécuter des scripts qui sauvegardent régulièrement les données de votre serveur, même lorsque vous n’êtes pas connecté au shell. C’est un moyen simple de garantir l’intégrité des données lors d’opérations longues ou non supervisées.
  • Automatisation et tâches planifiées. Les tâches planifiées comme les déploiements ou la génération de rapports peuvent s’exécuter de manière autonome avec nohup. Cela permet aux développeurs et aux administrateurs système d’exécuter des scripts persistants sans mettre en place un gestionnaire de services complet comme systemd. 

Syntaxe de la commande nohup

La syntaxe de la commande nohup est structurée comme suit :

nohup commande [options]

[/options]

Voici le détail de la syntaxe :

  • nohup – le nom de la commande, qui indique au terminal d’activer « no hang up ».
  • command — la commande, le script ou le processus que vous souhaitez que nohup exécute en continu.
  • [options] – indicateurs facultatifs permettant de modifier le comportement de la commande nohup.
  • [/options]

Les options de la commande nohup sont les suivantes :

  • –help – affiche le manuel de la commande nohup dans le shell de votre système.
  • –version – affiche la version de la commande nohup, utile pour vérifier qu’elle est installée et à jour.
  • &amp ; – un opérateur permettant d’exécuter la commande, le script ou le processus en arrière-plan plutôt que dans le shell principal.

Vous pouvez exécuter la commande suivante pour vérifier la version de nohup :

nohup --version

Comment utiliser la commande nohup ?

Voici plusieurs exemples de la commande nohup dans un scénario réel. Pour suivre, ouvrez le terminal de votre système ou le terminal du navigateur si vous utilisez un serveur privé virtuel (VPS) Linux de Hostinger.

Exécution d’un processus avec nohup

Pour exécuter un processus indéfiniment, utilisez la syntaxe de base de la commande nohup comme suit :

processus nohup

Par exemple, saisissez ce qui suit pour exécuter un simple script shell Bash qui affiche un message « Hello world ! » :

nohup ./script.sh

Après avoir exécuté nohup, vous pouvez consulter la sortie du processus dans le fichier nohup.out. Vérifiez son contenu à l’aide de la commande cat suivante :

cat nohup.out

Redirection de la sortie vers des fichiers

Pour enregistrer la sortie des processus exécutés avec nohup dans un autre fichier, utilisez l’opérateur de redirection (&gt ;) comme suit :

nohup ./script.sh > file.txt

Vérifiez la sortie enregistrée en affichant le contenu du fichier à l’aide de la commande Linux cat :

cat file.txt

Notez que l’opérateur de redirection ci-dessus écrasera le fichier avec la nouvelle sortie. Si vous souhaitez ajouter à la suite du contenu existant, utilisez l’opérateur suivant :

nohup ./script.sh >> file.txt

Dans certains cas, nohup ne redirige pas automatiquement les erreurs, ce qui vous oblige à le faire manuellement. Par exemple, ce qui suit consignera la sortie et les erreurs du processus dans file.txt :

nohup ./script.sh > file.txt 2>&1

Voici le détail de la commande :

  • nohup ./script.sh &gt ; file.txt – la commande permettant de rediriger la sortie du processus nohup vers file.txt
  • 2 – l’identifiant de stderr ou des erreurs du processus.
  • 1 – l’identifiant pour stdout ou la sortie du processus.
  • &gt ;& – la redirection de sortie qui envoie les erreurs (2) vers l’endroit où ira la sortie (1), en l’occurrence file.txt.

Dans le shell Bash, la commande peut également prendre la forme suivante :

nohup ./script.sh &> file.txt

Si vous souhaitez ajouter les erreurs, utilisez simplement la redirection &gt ;> au lieu de &gt ; comme ceci :

nohup ./script.sh >> file.txt 2>&1

Vous pouvez également enregistrer la sortie et les erreurs du processus nohup dans des fichiers distincts comme suit :

nohup ./script.sh > output.txt > errors.txt

Attention à l’espace

Notez qu’il n’y a pas d’espace entre l’opérateur de redirection et stdout ou stderr.

Exécution de processus en arrière-plan

Par défaut, la commande nohup exécute un processus dans le shell principal du terminal. Cela signifie que vous devez l’arrêter pour exécuter d’autres utilitaires, ce qui peut être problématique si vous avez plusieurs tâches.

Comme solution de contournement, nohup propose l’option &amp ; qui permet d’exécuter le processus en arrière-plan. Cela vous permet d’utiliser le shell principal pour d’autres tâches, même lorsque le processus est en cours d’exécution. Voici à quoi ressemble la commande :

nohup process &

Lors de l’exécution de nohup en arrière-plan, votre terminal affichera une sortie similaire à celle-ci :

[1] 1234

L’espace réservé [1] représente le rang du processus en arrière-plan dans le shell du terminal courant. Par exemple, [1] signifie le premier, [2] le deuxième, et ainsi de suite.

Par ailleurs, 1234 est l’identifiant de processus (PID) du job. Ces informations sont essentielles pour identifier et arrêter le processus, ce que nous expliquerons plus tard.

Vérification de l’état du processus nohup

Pour vérifier les processus en cours démarrés avec nohup, utilisez la commande ps suivie de leur PID. Voici la commande :

ps -p PID

Le processus est en cours d’exécution si le terminal affiche la commande exécutée ou le nom du script.

Si vous oubliez le PID, utilisez pgrep pour vérifier l’état d’un processus nohup à l’aide de son nom de commande ou de script, comme suit :

pgrep -a process-name

Par exemple, saisissez ce qui suit si vous voulez vérifier si la commande sleep est en cours d’exécution :

pgrep -a sleep

Si vous oubliez à la fois le PID et le nom du processus, utilisez la commande lsof pour vérifier les tâches qui utilisent le fichier de sortie nohup :

lsof | grep nohup.out

Votre terminal répertoriera les commandes et scripts exécutés avec nohup, ainsi que leur PID. N’oubliez pas de remplacer nohup.out si vous avez redirigé la sortie vers un autre fichier.

Comment gérer les processus nohup

Pour arrêter un processus nohup qui s’exécute dans le shell principal, appuyez sur le raccourci Ctrl + C pour envoyer le signal SIGTERM — une méthode d’arrêt en douceur qui permet à la tâche de s’achever avant l’arrêt.

Si vous exécutez une tâche nohup en arrière-plan, la seule façon de l’arrêter est d’utiliser la commande kill, qui permet de tuer un processus sous Linux à l’aide de son PID. La syntaxe est la suivante :

kill PID

Par exemple, voici une commande pour mettre fin à un processus dont le PID est 1234 :

kill 1234

Par défaut, la commande kill enverra le signal SIGTERM, ce qui peut ne pas suffire à arrêter un processus qui ne répond pas. Dans ce cas, utilisez le signal SIGKILL pour forcer l’arrêt de la tâche.

Pour envoyer le signal de terminaison SIGKILL avec la commande kill, ajoutez l’option -9 :

kill -9 PID

Notez que vous ne pouvez pas ramener des processus nohup de l’arrière-plan au premier plan ni dans le shell principal. C’est parce que nohup n’est pas interactif et n’enregistre pas vos tâches comme des jobs, qui sont gérables avec les commandes fg ou bg.

Si vous souhaitez interagir avec des processus en arrière-plan, exécutez-les à l’aide d’outils alternatifs que nous présenterons dans la section suivante.

Quelles sont les alternatives à nohup ?

Outre nohup, Linux propose d’autres outils qui permettent d’exécuter des commandes en arrière-plan. Voici quelques options populaires.

GNU Screen

GNU Screen est un multiplexeur de terminaux qui vous permet de créer des sessions de shell virtuelles restant actives en arrière-plan.

Étant donné que Screen est interactif, c’est une excellente alternative à nohup si vous souhaitez gérer et basculer facilement entre plusieurs processus.

tmux

Le multiplexeur de terminaux (tmux) est une alternative à Screen plus moderne et conviviale. Cet outil propose des fonctionnalités telles qu’un meilleur fractionnement des fenêtres et une interface utilisateur intuitive, ce qui le rend plus facile à utiliser que Screen.

Cependant, les fonctionnalités plus avancées de tmux le rendent également plus difficile à apprendre que Screen.

systemd-run

La commande systemd-run exécute des processus en tant que service, ce qui est plus fiable, car vos tâches bénéficient d’une meilleure isolation, d’une gestion des dépendances et de mécanismes de basculement.

Cependant, systemd-run n’est disponible que sur les systèmes d’exploitation basés sur systemd. C’est également plus complexe à mettre en place que nohup, puisque vous devez configurer le processus en tant que service.

Docker

Docker est un outil de conteneurisation permettant d’exécuter des processus dans des environnements dédiés, avec leurs propres contraintes de ressources et leur configuration logicielle. Comme les tâches peuvent s’exécuter indépendamment les unes des autres, cela offre un niveau élevé d’isolation et de fiabilité.

Docker est surdimensionné pour des tâches simples que vous exécutez généralement avec nohup, car il peut être complexe à configurer et à gérer. C’est idéal pour les processus complexes, comme la mise en place d’un pipeline de déploiement cohérent.

Conclusion

La commande nohup est un outil pratique pour maintenir des processus simples en cours d’exécution en arrière-plan. C’est particulièrement utile lorsque vous travaillez avec un serveur distant, où un problème de connexion peut mettre fin à la session du terminal.

Notez que nohup convient surtout aux processus simples, ponctuels. Pour des tâches plus complexes, envisagez un autre outil doté de fonctionnalités interactives, comme Screen.

Une fois que vous avez compris l’objectif de la commande nohup, essayez-la dans le terminal de votre système ou dans le terminal du VPS de Hostinger dans le navigateur. L’hébergement VPS de Hostinger vous offre également la possibilité de solliciter Kodee, un assistant IA, pour obtenir de l’aide si nécessaire.

Tout le contenu des tutoriels de ce site est soumis aux normes éditoriales et aux valeurs rigoureuses de Hostinger.

Author
L'auteur

Katerina Bosinaki

Katerina is a Localization Project Manager at Hostinger, bringing over 5 years of project management experience and a 6-year background as a linguist. She focuses on making technology more approachable by transforming complex guides into clear, easy-to-follow tutorials. In her free time, when she’s not staying up-to-date with the latest in localization, she enjoys watching movies and reading books.

Ce que disent nos clients

Laissez une réponse

Veuillez remplir les champs obligatoires.Veuillez cocher la case de la confidentialité.Veuillez remplir les champs obligatoires et accepter la case de confidentialité.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.