Bases de Linux et de la ligne de commande
Sur un serveur auquel on s'est connecté par SSH, on a lancé un long traitement avec « ./run.sh & », puis, en fermant la connexion, le traitement s'est arrêté lui aussi. Quelle est la manière la plus appropriée de le lancer pour qu'il continue après la fermeture de la connexion ?
- A./run.sh > run.log 2>&1 &
- Bnice -n 19 ./run.sh > run.log 2>&1 &
- Cnohup ./run.sh > run.log 2>&1 &
Afficher la réponse et l'explication
Réponse : C. nohup ./run.sh > run.log 2>&1 &
Quand la connexion est perdue, le signal SIGHUP, qui indique que le terminal a raccroché, est envoyé au shell, et les shells comme bash envoient eux aussi SIGHUP à leurs tâches. L'action par défaut à la réception de SIGHUP est de se terminer : les tâches en arrière-plan s'arrêtent donc aussi. nohup lance la commande de sorte qu'elle ignore SIGHUP, et si sa sortie est dirigée vers un fichier, le traitement continue après la fermeture de la connexion. Si on la lance depuis un terminal sans redirection de la sortie, nohup écrit la sortie dans un fichier nommé nohup.out. Une autre méthode courante consiste à utiliser un outil comme tmux ou screen, qui maintient la session de terminal sur le serveur et permet de s'y reconnecter plus tard.
Continuer : 9 autres questions sur Bases de Linux et de la ligne de commande