Comment puis-je utiliser nohup si le script shell prend plus de temps à exécuter?

Mes shellscripts prennent vraiment longtemps à courir, environ 30 minutes, mais si je pars et sort pour le déjeuner, je doute que:

1: la session de mastic sera-t-elle fermée si le script est en cours?

2: si la session de mastic se ferme, le script sortira.

Si j'utilise nohup scriptname , ça va bien?

PuTTY (ou tout autre client SSH) ne se soucie pas si vous regardez l'écran ou à l'extérieur. Il ne ferme pas une session seule.

Une session sera fermée uniquement si:

  1. Vous fermez manuellement (p. Ex., Tapez se logout , Ctrl + D , exit , etc., etc.)
  2. Il existe un déconnexion automatique ou un déclencheur inactif dans votre shell.
  3. La connexion réseau se produit.

Ce dernier ne devrait pas se produire de façon aléatoire, même si un équipement peu coûteux pourrait «commodément» fermer les connexions lorsqu'ils pensent qu'ils sont inactifs. Cela se produit généralement avec des équipements SOHO qui contiennent très peu de mémoire et une connexion agressivement étroite lorsqu'ils devinent qu'ils ne sont plus utilisés.


Jusqu'à présent pour puTTY et sessions. Quant à nohup , plongeons un peu plus profondément.

Dans les premiers jours, les gens utilisaient des lignes téléphoniques et des modems pour composer. Parfois, cette connexion est morte. Dans ce cas, la coque obtient un signal que la ligne a détecté un coup de fouet. (Signal 1, HUP).

Lorsque cela se produit, le shell signale les programmes en cours d'exécution avec SIGHUP, ce qui signifie essentiellement que «la ligne téléphonique a chuté. Arrêtez-vous soigneusement. (Fermez les fichiers, enregistrez le cas échéant etc.).

Lorsque vous déconnectez-vous ou lorsque PuTTY (ssh) décède, cela se produit.

Si vous exécutez un programme avec nohup deux choses arrivent:

  1. SIGHUP est ignoré. Le programme ne s'arrête donc pas.
  2. La sortie standard est écrite dans un fichier (par défaut: nohup.out ) plutôt que sur l'ATS.

Si j'utilise nohup scriptname , ça va bien?

Si vous utilisez nohup scriptname et que le script n'a pas besoin d'entrée, alors oui, ça va bien. Si vous souhaitez voir la sortie du script pendant son exécution, vous pouvez affiner le fichier journal.

nohup scriptname &
tail -f nohup.out

Outre nohup il existe au moins deux autres options intéressantes:

  • Écran ,
  • Tmux

Les deux vous permettent non seulement de survivre à une ligne déconnectée, mais aussi de rattacher un terminal plus tard.

Exemple:

Assis derrière un ordinateur-1, connecté au serveur-1

screen Démarre l'écran
make bzimage Quelle que soit la tâche / script que vous voulez
Ctrl + A , Ctrl + D             Détacher; screen semble avoir pris fin
logout Déconnexion

À ce stade, l' screen est toujours en cours d'exécution et fournit un shell pour votre script.

Disons que vous allez à la maison, asseyez-vous derrière votre propre bureau et ssh au serveur-1,

ssh server-1.work.tld
Nom d'utilisateur
mot de passe
screen -r (Continuez un écran précédemment ajouté)
Continuez où vous avez cessé au travail.