Qual è il modo migliore per eseguire un comando ssh remoto in background ma ancora visualizzato?


14

Devo eseguire i comandi SSH in remoto con l'output visualizzato localmente. Ma se la connessione si interrompe, voglio ancora che il comando venga eseguito.

Non sto parlando così tanto di accedere e di eseguire ma di eseguire "comandi && command ecc" di ssh user @ remotehost

Come posso assicurarmi che il comando venga eseguito anche se la connessione si interrompe?

Risposte:


26

Il modo migliore per farlo è usare lo schermo, che mantiene la sessione aperta in modo persistente anche se la connessione si interrompe (e se vuoi ricominciare a usarla puoi fare una screen -re la riaprirà).

Il prefisso di qualsiasi comando si desideri eseguire screen(ad es. ssh -t user@host screen command) Dovrebbe fare il lavoro.

Se vuoi che venga eseguito sullo sfondo della shell, puoi anche aggiungere un &tutto.


Probabilmente dovrai usare ssh -t per allocare un terminale per l'esecuzione del comando. Altrimenti l'errore è "Deve essere collegato ad un terminale".
bonsaiviking,

11

Stai cercando di avere una sessione persistente che puoi riprendere o semplicemente per impedire a una disconnessione di uccidere l'exection?

Per i primi, l'uso screen, per quest'ultimo, nohup.


7

Come accennato in precedenza, screenpuò fare tutto il trucco. Ma non solo ciò di cui hai bisogno. Uso lo schermo da anni e ora lo utilizzo ogni volta che accedo ai sistemi. Prova a installare screene creare ~/.screenrccon tale configurazione:

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

Quindi corri screen -Rd vcf. Questa è l'invocazione preferibile dello schermo. Ti riconnetterai alla sessione precedentemente creata con il nome vcf * (o verrai avvisato se ambiguo) o, se la sessione non è stata ancora aperta, verrà creata. CTRL+ Aè una meta chiave che fa tutto. CTRL+A C( CTRL+ A, quindi C) crea una nuova finestra (schermo) all'interno della sessione. CTRL+A SPACEsposta lo stato attivo sulla finestra successiva in un round. CTRL+A Dscollegare la sessione corrente mantenendo tutte le finestre funzionali tra le connessioni. Se hai avviato un'attività molto lunga, puoi staccarla dallo schermo e ricollegarla in un secondo momento per vedere cosa succede. Lo stesso accade se la sessione SSH viene persa: lo schermo rimane attivo con tutte le finestre aperte e tutte le attività avviate.

Se vuoi chiudere qualche finestra all'interno dello schermo - solo exitdalla shell in esso. Se si desidera chiudere tutte le shell / attività in tutte le finestre e uscire dalla schermata, premere CTRL+A CTRL+\e premere "Y" quando richiesto.

Per tutto il resto vedi la schermata man.



1

Di solito farei:

nohup mycommand &

tail -f nohup.out
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.