Lasciare lo script bash in esecuzione sul terminale remoto mentre non si è connessi?


14

Ho uno script bash che richiede diverse ore per essere eseguito. Mentre è in esecuzione, vorrei fare altre cose, che possono comportare la disconnessione o la disconnessione da Internet (il mio script esegue test di rete su vari computer).

Comprendo che esiste un comando che mi consentirebbe di eseguire i test da un terminale remoto e di disconnettersi dal terminale mentre è in esecuzione. Qualcuno sa cos'è questo comando?

Risposte:


17

Il comando che stai cercando è nohup.

C'è anche screen, che è quando vuoi lasciare qualcosa in esecuzione ma tornare indietro e ricollegarti in modo interattivo più tardi.

nohupè più semplice se un comando non prevede input da parte dell'utente dopo l'avvio ed screenè migliore se si desidera essere in grado di eseguire il programma in modo interattivo.


Ho guardato nohup in questo momento e apparentemente ci sono problemi con l'input e l'output che potrebbero causare il blocco dello script. Ho anche visto qualcosa sullo schermo, che mi sembra ciò di cui avevo letto prima. Sai come usare uno di questi?
Ritwik Bose,

1
nohup è per quando uno script non prevede input da parte dell'utente: salva tutto l'output in un file. Lo schermo è per quando vuoi lasciare qualcosa in esecuzione ma torna indietro e ricollegalo in modo interattivo più tardi. nohup è più semplice se un comando non prevede input da parte dell'utente dopo l'avvio e lo schermo è migliore se si desidera essere in grado di eseguire il programma in modo interattivo.
Justin Smith,

Ah l'ho trovato. Per lo schermo, è ctrl-A d per staccare e -r + pid per ricollegarsi.
Ritwik Bose,

Buona risposta. Devi aggiungere il commento sullo schermo alla tua risposta in modo che risulti più evidente.
DaveParillo,

1

Io uso nohupper questo. Nel mio caso avevo uno script Python chiamato action.py Ho eseguito lo script su un server remoto con il quale nohup python action.py & avrei quindi chiuso il terminale. Successivamente, al termine dell'esecuzione, è possibile visualizzare tutti gli output del processo in nohup.outcui verranno creati nella stessa directory di action.py. Se il file esiste già, verrà aggiunto un ulteriore output.

L'unico inconveniente è non sapere quando lo script ha seguito il suo corso, quindi nel mio caso l'ho fatto sparare una e-mail al completamento. Spero che questo abbia aiutato qualcuno!


0

Cosa succede se hai dimenticato di aggiungere il nohupcomando all'inizio del tuo comando?

Supponiamo che tu abbia eseguito il seguente comando lungo:

L'inizio dell'output di un lungo comando

Questo si chiama perché ls -Ral /dovrebbe elencare tutti i file e tutte le cartelle, comprese quelle nascoste, con un formato lungo, ricorsivamente a partire dalla cartella principale. Potrebbe volerci un po '.

Premi ctrl+ Z.

Arresto del comando lungo

Come lo riavrai?

Il comando per riportarlo in primo piano è fg.

Riporta il comando

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.