Avere un processo rsync completato dopo aver chiuso la connessione SSH


13

Sto trasferendo una grande quantità di file da un computer all'altro utilizzando rsync. Lo sto facendo SSHing nel computer di origine ed eseguendo un comando come questo:

sudo rsync ssh --rsync-path="sudo rsync" source_dir user@host.com:dest_dir.

Anche se aggiungo nohupprima di questo comando, ogni volta che chiudo la finestra del terminale da cui ho SSHed, la connessione si chiude.

Come posso averlo in modo che il mio trasferimento di file continui ancora quando chiudo la mia connessione SSH?

Risposte:


16

Il motivo per cui nohupnon ti aiuta è perché il programma funziona con file IO standard.

Ecco 'un estratto dalla pagina Wiki per nohup:

Nota: in genere i lavori in background non supportati vengono utilizzati per evitare di terminarli durante la disconnessione da una sessione SSH remota. Un problema diverso che si presenta spesso in questa situazione è che ssh rifiuta di disconnettersi ("blocchi"), poiché rifiuta di perdere qualsiasi dato da / verso i processi in background. Questo problema può essere superato anche reindirizzando tutti e tre i flussi I / O:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Si noti inoltre che una sessione SSH di chiusura non invia sempre un segnale HUP a processi dipendenti. Tra l'altro, ciò dipende dal fatto che uno pseudo-terminale sia stato assegnato o meno.

Puoi usarlo screenper questo.

Basta creare una sessione schermo con: screen -S rsync quindi, si stacca lo schermo con CTRL+A d

E puoi disconnetterti da SSH


4
Voglio aggiungere che quando si esegue qualsiasi lavoro che sarà interrotto, ad esempio da una connessione persa, sarà problematico, quindi eseguirlo in una sessione dello schermo. Lo schermo è progettato per proteggere da perdite accidentali di connessione. Puoi accedere in remoto, avviare la schermata, iniziare il tuo lavoro e se perdi la connessione puoi riconnetterti a qualsiasi istanza della schermata in esecuzione. Screen ha altre utili funzionalità: l'acquisizione della sessione in un file di registro, con più "schermate" in una singola sessione (risparmio dell'overhead di rete) e più visualizzatori (stile Classroom). Vale anche la pena ricordare che tmux è un'alternativa allo schermo.
Johan

6

Il comando su schermo va bene, ma non ha funzionato esattamente per le mie esigenze.

Questo ha funzionato molto meglio:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &

ha funzionato per me, proprio come la risposta accettata, grazie
Salaros
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.