Cosa succede a un'operazione continua se facciamo ssh e poi ci disconnettiamo?


10

Sto spostando una directory in un'altra usando il comando mv.

Tuttavia, sono stato costretto a spegnere il mio computer, il che significa perdere la connessione al server.

Cosa succede al comando mv?

Nota: dopo essermi riaccesso, ho visto che tutti i file sono stati spostati correttamente anche se ero sicuro che non fosse stato spostato quando ho chiuso la connessione. Sembra che mv abbia continuato a funzionare.

Questo sono io ssh per centosh machine nel server cloud steadfast.net.


Immagino che genererà un errore sull'indisponibilità della fonte / destinazione
SHW il

1
lo spostamento di una directory in un'altra è "istantaneo" se si trovano sulla stessa partizione. E anche se sposti file per file, può essere veloce. Sei sicuro che sia continuato dopo la disconnessione (invece di finire mentre i diversi segnali SIGHUP vengono inviati ai processi figlio, il che può richiedere del tempo [su scala del computer].
Olivier Dulac il

come soluzione alternativa, utilizzare screeno tmuxuna volta effettuato l'accesso per avviare un terminale virtuale che continuerà a funzionare quando ci si disconnette [vale a dire, è possibile ricollegarsi successivamente ad esso e vedere il terminale nello stesso stato in cui è stato lasciato, oltre a eventuali aggiornamenti in tra]
Olivier Dulac il

Risposte:


19

Se è mvstato avviato come:

ssh host mv x y

Quindi mvriceverà un SIGPIPE (e morirà) se tenta di scrivere qualcosa su stdout o stderr (come un messaggio di errore).

Se hai avviato una sessione interattiva come:

ssh host

E iniziato mvdalla shell interattiva lì dentro, quando il lato master dello pseudo-terminale avviato sshdverrà chiuso (alla sshchiusura della connessione TCP all'uscita), il leader della sessione associato al lato slave dello pseudo-terminale, che è la shell interattiva remota, riceverà un segnale SIGHUP (riagganciare).

Alla ricezione di quel segnale, le shell (a meno che tu non abbia emesso un trap '' HUP) in genere inoltrano quel segnale a tutti i processi nei lavori che hanno iniziato, a meno che tu non gli abbia esplicitamente detto di non farlo (come con disowno con &|alcune shell).

Altri processi (come mv) in genere muoiono quando ricevono quel segnale a meno che non gli sia stato detto di ignorarlo (usando nohupo se il loro genitore lo ha ignorato).

Se hai emesso un:

trap '' HUP

Quindi tutti i lavori avviati dopo lo erediteranno e ignoreranno SIGHUP.

La shell non morirà del segnale SIGHUP inviato al momento della disconnessione ma uscirà al prompt successivo, poiché il suo stdin è scomparso. All'uscita, alcune shell inviano SIGHUP ai loro lavori (non sconosciuti). Quelli iniziati dopo che lo trap '' HUPignoreranno, gli altri moriranno.

In breve, in quel caso, a meno che tu non abbia preso le precauzioni precedenti in modo che ciò non accada, mvmorirai.

Per evitare la prossima volta, se si utilizza tcsh, zsho bash, prima di spegnere la macchina, premere Ctrl-Zper sospendere mv, entrare bga riprenderla in background, e disowndi rinnegare esso.

Oppure potresti usare screeno tmux. In un SIGHUP, questi si staccheranno dal loro terminale host ormai scomparso, ma le applicazioni in esecuzione nel terminale che emula continueranno a funzionare senza testa e potrai ricollegare la sessione a un altro terminale in seguito per vedere come è mvandata.

Oppure usa nohup mvper rendere mvimmune a SIGHUP e avere il suo output ed errori vai in un nohup.outfile che puoi controllare in seguito.

Ora, non conosco il tuo specifico provider di hosting, ma con alcuni, quando sei sshnell'istanza, non stai iniziando una sessione di shell laggiù ma piuttosto ti colleghi alla console, cioè a una sessione che è già stata avviata e quando esci non si termina quella sessione, ma si stacca da essa. Quindi, la shell non viene uccisa, né lo fa mv. In tal caso, noterai che l' psesecuzione da lì ti darebbe lo stesso pidper la tua shell in due sshsessioni separate .


Quindi stai dicendo che il mv verrà chiuso. Bene, per favore controlla la nota.
user4951

2
+1. risposta eccezionale (come va bene nei dettagli per spiegare cosa succede e quando).
Olivier Dulac il

Ho compilato un articolo basato sulle tue risposte . Eventualmente qualcuno lo troverà utile.
x-yuri,
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.