Exécuter des processus après déconnexion
Parfois, vous avez besoin qu'un processus continue de s'exécuter même après vous être déconnecté du terminal. La commande nohup vous permet d'exécuter une commande qui continuera de s'exécuter même après avoir quitté le shell.
Créons un script qui s'exécutera longtemps :
cd ~/project
nano persistent-task.sh
Ajoutez le contenu suivant :
#!/bin/bash
## This script runs for a very long time
echo "Starting persistent task at $(date)" > persistent-output.log
for i in {1..100}; do
echo "Iteration $i at $(date)" >> persistent-output.log
sleep 10
done
echo "Persistent task completed at $(date)" >> persistent-output.log
Enregistrez et quittez nano, puis rendez le script exécutable :
chmod +x persistent-task.sh
Maintenant, exécutez-le avec nohup et mettez-le en arrière-plan :
nohup ./persistent-task.sh &
Vous verrez une sortie similaire à :
[1] 5678
nohup: ignoring input and appending output to 'nohup.out'
Cela signifie que le processus s'exécute en arrière-plan et continuera même si vous vous déconnectez. La sortie qui irait normalement au terminal est redirigée vers un fichier appelé nohup.out.
Astuce pour gérer la sortie : Si vous ne voulez pas que la sortie du processus en arrière-plan apparaisse dans votre terminal et interfère potentiellement avec votre travail, vous pouvez rediriger la sortie vers un fichier :
## Rediriger la sortie vers un fichier spécifique
./long-task.sh > task-output.log 2>&1 &
## Ou rediriger vers /dev/null pour ignorer complètement la sortie
./long-task.sh > /dev/null 2>&1 &
Le 2>&1 redirige à la fois la sortie standard et la sortie d'erreur. De cette façon, le processus en arrière-plan s'exécute silencieusement sans encombrer votre terminal.
Vous pouvez vérifier si le processus est en cours d'exécution :
ps aux | grep persistent-task.sh
Et vous pouvez examiner le fichier de sortie :
cat persistent-output.log
La sortie montre l'heure de début et les itérations de la tâche persistante.
La commande disown
Une autre façon de maintenir les processus en cours d'exécution après la déconnexion est d'utiliser la commande disown. Tout d'abord, exécutez un processus en arrière-plan :
cd ~/project
./persistent-task.sh &
Ensuite, utilisez disown pour le détacher du terminal :
disown %1
Maintenant, ce processus continuera de s'exécuter même si vous fermez le terminal.
Ces commandes sont essentielles lors de l'exécution de tâches sur des serveurs distants où vous avez besoin que les processus continuent après la déconnexion.