Laisser le script bash s'exécuter sur le terminal distant sans être connecté?

14

J'ai un script bash qui prend plusieurs heures à s'exécuter. Pendant qu'il s'exécute, je voudrais faire d'autres choses, qui peuvent impliquer la déconnexion ou la déconnexion d'Internet (mon script exécute des tests de réseau sur différents ordinateurs).

Je comprends qu'il existe une commande qui me permettrait d'exécuter mes tests à partir d'un terminal distant et de me déconnecter du terminal pendant son exécution. Quelqu'un sait-il ce qu'est cette commande?

Ritwik Bose
la source

Réponses:

17

La commande que vous recherchez est nohup.

Il y en a aussi screen, qui est pour quand vous voulez laisser quelque chose en marche mais que vous revenez et que vous vous rattachez de manière interactive plus tard.

nohupest plus simple si une commande n'attend aucune entrée d'utilisateur après le lancement, et screenest meilleure si vous voulez pouvoir exécuter le programme de manière interactive.

Justin Smith
la source
J'ai regardé nohup en ce moment et apparemment, il y a des problèmes d'entrée et de sortie qui pourraient provoquer le blocage du script. J'ai également vu quelque chose sur l'écran, ce qui me semble être ce que j'avais lu auparavant. Savez-vous comment utiliser l'un ou l'autre de ces éléments?
Ritwik Bose
1
nohup est lorsqu'un script n'attend aucune entrée de l'utilisateur - il enregistre toutes les sorties dans un fichier. L'écran est pour quand vous voulez laisser quelque chose en marche mais que vous revenez et que vous le rattachez interactivement plus tard. nohup est plus simple si une commande n'attend aucune entrée d'utilisateur après le lancement, et screen est meilleur si vous voulez pouvoir exécuter le programme de manière interactive.
Justin Smith
Ah je l'ai trouvé. Pour l'écran, c'est ctrl-A d pour détacher et -r + pid pour rattacher.
Ritwik Bose
Bonne réponse. Vous devez ajouter le commentaire d'écran à votre réponse pour qu'il ressorte davantage.
DaveParillo
1

J'utilise nohuppour ça. Dans mon cas, j'avais un script python nommé action.py J'ai exécuté le script sur un serveur distant et nohup python action.py & je fermais ensuite le terminal. Plus tard, une fois l'exécution terminée, vous pouvez voir toutes les sorties du processus dans nohup.outlequel elles seront créées dans le même répertoire que action.py. Si le fichier existe déjà, une sortie supplémentaire lui sera ajoutée.

Le seul hic est de ne pas savoir quand le script a suivi son cours, donc dans mon cas, je l'ai fait me tirer un e-mail à la fin. J'espère que cela a aidé quelqu'un!

Bryan J
la source
0

Que se passe-t-il si vous avez oublié d'ajouter la nohupcommande au début de votre commande?

Disons que vous avez exécuté la commande longue suivante:

Le début de la sortie d'une commande longue

Ceci est appelé car il ls -Ral /est censé répertorier tous les fichiers et tous les dossiers, y compris ceux cachés, avec un format long, récursivement à partir du dossier racine. Ça peut prendre un moment.

Appuyez simplement sur ctrl+ Z.

Arrêt de la commande longue

Comment le récupérez-vous?

La commande pour le remettre au premier plan est fg.

Ramener la commande


la source