Menu Fermer

Linux : exécuter des commandes en arrière-plan

Lorsque vous vous déconnectez d’une session Linux, le système envoie un signal HUP (hangup) à tous les processus actifs associés au terminal. Ce signal indique aux processus de se terminer.
Mais lorsque l’on administre un système Linux, il peut parfois être nécessaire d’exécuter des commandes en arrière-plan.
Par exemple, car on a besoin de libérer le terminal pour exécuter une seconde commande.
Dans d’autres cas, lorsque l’on prend la main à distance par SSH, il peut être nécessaire que l’exécuter d’un script continue après la fermeture de la session.

Dans ce tutoriel, je vous donne plusieurs solutions pour lancer des commandes en arrière plan sur Linux.

Comment exécuter des commandes et processus en arrière-plan sur Linux

Comment exécuter des commandes et processus en arrière-plan sur Linux

Avec le caractère &

Ajoutez l’esperluette à la fin d’une commande pour placer la commande en arrière-plan.
Voici un exemple où on télécharger un fichier en arrière-plan avec wget :

wget https://exemple.com/grosfichier.zip &
[1] 21348

La sortie “[1] 21348” indique que le processus de téléchargement s’exécute en arrière-plan avec un ID de travail de “1” et un PID de “21348”.

Ensuite, pour lister les processus exécutés en arrière-plan, utilisez la commande jobs :

jobs -l

Enfin, la commande fg permet de rappeler le processus :

fg <job-id>

Toutefois, cela ne suffit pas, si vous souhaitez que l’exécution du processus perdure après l’arrêt du terminal ou de la session.
En d’autres termes, si vous vous déconnectez de votre terminal, tous les travaux en cours seront interrompus.
Pour éviter cela, vous pouvez passer l’option -h de la commande disown. Cette option marque chaque jobID pour que le SIGHUP ne soit pas envoyé au job si l’interpréteur de commandes reçoit un SIGHUP. La syntaxe est la suivante :

disown -h <job-id>

Imaginons que vous souhaitez exécuter une mise à jour du système avec apt-get en root en arrière-plan et qui ne s’arrête pas si la session se termine.
Voici les commandes à utiliser :

sudo -i # Pour devenir root
apt-get upgrade &> /root/system.update.log & # Mise à jour du système avec redirection de la sortie dans un fichier
disown -h # Marquer apt-get pour que SIGHUP ne soit pas envoyé à la sortie
exit # On quitte le shell root

Avec la commande Nohup

La commande nohup de Linux est un outil puissant qui vous permet d’exécuter vos processus en arrière-plan. Elle est extrêmement utile lorsque vous souhaitez exécuter un processus qui prend beaucoup de temps et que vous ne voulez pas occuper votre terminal ou votre session pendant toute cette durée.

nohup wget https://exemple.com/largefile.zip &
Comment utiliser la commande Nohup sur Linux

Avec Screen

La commande screen est un gestionnaire de fenêtres plein écran qui multiplexe un terminal physique entre plusieurs processus. Elle vous permet d’exécuter plusieurs sessions de terminal dans une même fenêtre et de passer de l’une à l’autre sans effort.

Voici comment démarrer une nouvelle session nommée ‘nom_session” avec la commande screen :

screen -S nom_session

Pour reprendre la session, utilisez l’option -r en indiquant le nom de la session :

screen -r nom_session

Avec Tmux

Tmux, abréviation de “terminal multiplexer”, est une autre commande qui vous permet d’exécuter plusieurs sessions de terminal dans une seule fenêtre. Elle est similaire à screen, mais offre plus de fonctionnalités et une interface plus moderne.

tmux new -s ma_session

Dans cet exemple, nous démarrons une nouvelle session tmux nommée ‘ma_session’. La sortie “[detached (from session ma_session)]” indique que la session est en cours d’exécution en arrière-plan.

Pour s’attacher à la session, utilisez la commande attach :

tmux attach -t ma_session