Come eseguire lo script tramite SSH che non termina quando chiudo la connessione?


18

Devo eseguire lo script, che richiede molto tempo per l'esecuzione o voglio solo che funzioni per sempre. Non posso solo SSH sulla mia macchina, perché quando mi disconnetto smette di funzionare.

Esiste un modo per eseguire uno script che non dipende dalla shell che l'ha avviato?

Sto usando Ubuntu 9.04.

Risposte:


24

È possibile eseguire il comando con il comando nohup prima di esso. Puoi anche eseguirlo in 'schermo', che ti permetterà di ricollegare il terminale.

Per esempio:

ssh mySever 'nohup bash myscript.sh'

O semplicemente ssh in ed esegui il comando nohup. Dovrebbe continuare a funzionare anche quando ti disconnetti. Questo perché il nohup intercetterà il singal SIGHUP (hangup).

Lo schermo è un po 'più coinvolto, ma per i 20 minuti che potrebbero volerci imparare le basi, è uno degli strumenti più utili là fuori. Ecco un tutorial .


Sniped by Kyle ...> smile <
Evan Anderson,

+1 a chiunque tenga Evan. Happy 10K :)
squillman,

1
il link al tutorial è interrotto :(
Ido Ran

7

Uso sempre nohup. Se mi interessa l'output, lo reindirizzo a un file di registro, altrimenti lo invio a / dev / null.

Esempio:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Questo lo mette in background, con l'output che va su / dev / null, ed è immune al segnale HUP se ci si disconnette. Puoi anche "rinnegare" il lavoro con determinate shell (come bash) in modo che non sia collegato alla tua sessione.

disown %1

1
+1 per il rifiuto - molto utile quando si dimentica di correre usando Nohup
Segna il

5

Per installare lo schermo: apt-get install screen

Quindi avviare utilizzando semplicemente: screen

E man screenper ottenere il legame chiave.


+1! lo schermo è cosa da fare!
Javier,

Usavo lo schermo, ma sono passato a tmux per una serie di motivi. Google "tmux vs screen" e troverai alcuni link come questo: superuser.com/questions/236158/tmux-vs-screen
m0j0

2

Durante l'accesso a un server, è possibile eseguire uno script in modalità distaccata dal seguente comando:

nohup script >script.out 2>script.err &

Successivamente, quando accedi nuovamente, puoi controllare script.out per qualsiasi output e script.err per eventuali messaggi di errore. Se desideri messaggi di output e di errore nello stesso file, procedi nel seguente modo:

nohup script >script.out 2>&1 &
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.