Choisir une solution
Pour qu'une commande continue de s'exécuter après la fermeture de votre session SSH, choisissez l'une des solutions suivantes :
Solution 1 : Utiliser les commandes nohup et & : idéale pour exécuter des scripts ou des commandes automatisés non interactifs ponctuels.
Solution 2 : Utiliser GNU screen : recommandée pour les tâches interactives de longue durée qui peuvent nécessiter un débogage ou être reprises ultérieurement.
Solution 1 : Utiliser les commandes nohup et &
La commande nohup permet à un processus de continuer à s'exécuter après la fermeture du terminal, tandis que le symbole & envoie le processus en arrière-plan.
-
Exécutez la commande en arrière-plan.
Cette commande redirige à la fois la sortie standard et les erreurs vers
[your_log_file].sudo nohup [your_command] >[your_log_file] 2>&1 &Par exemple, pour exécuter
bash hello.shen arrière-plan et écrire la sortie dans un nouveau fichier nomméoutput.logdans le répertoire courant, exécutez la commande suivante :sudo nohup bash hello.sh > output.log 2>&1 &. -
Consultez la sortie de la commande.
sudo tail -f [your_log_file] -
Arrêtez le processus.
ImportantL'arrêt du processus met fin à la commande ou à la tâche. Procédez avec prudence.
-
Recherchez l'ID de processus (PID). Remplacez
[your_command]par la commande que vous avez exécutée à l'étape 1.sudo ps aux | grep "[your_command]"Par exemple, si vous avez exécuté
sudo nohup bash hello.sh > output.log 2>&1 &, vous devez exécutersudo ps aux | grep "bash hello.sh"pour trouver son PID. Utilisez la commande
sudo kill [PID]pour arrêter le processus.
-
Solution 2 : Utiliser GNU screen
-
Installez GNU screen.
-
Pour Alibaba Cloud Linux et CentOS
sudo yum install -y screen -
Pour Debian et Ubuntu
sudo apt-get install -y screen
-
-
Créez et accédez à une nouvelle session.
[Name]correspond au nom personnalisé de votre session.screen -S [Name]Par exemple, pour créer une session nommée
mysession, exécutezsudo screen -S mysession. Exécutez votre tâche dans la nouvelle session.
-
Détachez la session.
Appuyez sur Ctrl+A+D pour détacher la session
screenactuelle. -
Reprenez la session.
-
Répertoriez les sessions screen disponibles pour trouver le PID de la session cible.
sudo screen -lsThere is a screen on: 2046.mytask (Detached) 1 Socket in /run/screen/S-root.Dans cet exemple, le PID de la session est
2046. -
Reprenez la session.
Remplacez
[PID]par le PID de la session obtenu à l'étape précédente.sudo screen -r -d [PID]Par exemple, pour reprendre la session dont le PID est 2046, exécutez
sudo screen -r -d 2046.
-
-
Arrêtez la session.
ImportantL'arrêt d'une session met également fin à toutes les tâches et commandes en cours d'exécution au sein de celle-ci. Procédez avec prudence.
Remplacez
[PID]par le PID de la session.sudo kill [PID]