Co stanie się z kontynuacją operacji, jeśli wykonamy ssh, a następnie się rozłączymy?

10

Przenoszę jeden katalog do drugiego za pomocą polecenia mv.

Byłem jednak zmuszony wyłączyć komputer, co oznacza utratę połączenia z serwerem.

Co się stało z poleceniem mv?

Uwaga: po ponownym zalogowaniu zobaczyłem, że wszystkie pliki zostały poprawnie przeniesione, chociaż byłem pewien, że nie zostały przeniesione po zamknięciu połączenia. Wygląda na to, że mv nadal działa.

To jest ja ssh to centosh machine in steadfast.net cloud server.

użytkownik4951
źródło
Zgaduję, że wygeneruje błąd dotyczący niedostępności źródła / miejsca docelowego
SHW,
1
przeniesienie katalogu do innego jest „natychmiastowe”, jeśli znajdują się na tej samej partycji. Nawet jeśli przenosisz pliki według plików, może to być szybkie. Czy jesteś pewien, że kontynuowało się po rozłączeniu (zamiast zakończyć, gdy różne sygnały SIGHUP są wysyłane do procesów potomnych, co może zająć trochę czasu [na skalę komputerową]
Olivier Dulac
w celu obejścia tego problemu użyj screenlub tmuxpo zalogowaniu się, aby uruchomić terminal wirtualny, który będzie nadal działał po rozłączeniu [możesz później podłączyć go ponownie i zobaczyć terminal w takim samym stanie, w jakim go opuściłeś, oraz wszelkie aktualizacje w między]
Olivier Dulac,

Odpowiedzi:

19

Jeśli mvzostał uruchomiony jako:

ssh host mv x y

Następnie mvotrzyma SIGPIPE (i umrze), jeśli spróbuje napisać cokolwiek na stdout lub stderr (np. Komunikat o błędzie).

Jeśli rozpocząłeś sesję interaktywną, taką jak:

ssh host

I zaczął się mvod interaktywnej powłoki tam, kiedy strona główna pseudotermina uruchomiona przez sshdzostanie zamknięta (po sshzamknięciu połączenia TCP przy wyjściu), lider sesji powiązany z niewolniczą stroną pseudo-terminala, który jest zdalną interaktywną powłoką, otrzyma sygnał SIGHUP (rozłącz się).

Po otrzymaniu tego sygnału, powłoki (chyba że wydałeś a trap '' HUP) zazwyczaj przekazują ten sygnał do wszystkich procesów w zadaniach, które rozpoczęły, chyba że wyraźnie to powiedziałeś (nie z disownlub &|w niektórych powłokach).

Inne procesy (takie jak mv) zazwyczaj umierają po otrzymaniu tego sygnału, chyba że otrzymają polecenie zignorowania go (przez użycie nohuplub jeśli ich rodzic zignorował go).

Jeśli wydałeś:

trap '' HUP

Następnie wszystkie zadania rozpoczęte po nim odziedziczą go i zignorują SIGHUP.

Powłoka nie umrze z powodu sygnału SIGHUP wysłanego po rozłączeniu, ale opuści się przy następnym monicie, ponieważ jej standardowe wejście zniknęło. Po wyjściu niektóre pociski wysyłają SIGHUP do (nie odrzuconych) zadań. Ci, którzy zaczęli po tym trap '' HUP, zignorują to, inni umrą.

Krótko mówiąc, w takim przypadku, jeśli nie podejmiesz wcześniejszych środków ostrożności, aby tak się nie stało, mvumrzesz.

Aby tego uniknąć następnym razem, jeśli używasz tcsh, zshlub bash, przed wyłączeniem urządzenia, należy nacisnąć przycisk Ctrl-Z, aby wstrzymać mv, wprowadź bgwznowić ją w tle, i disownaby wyprzeć go.

Lub możesz użyć screenlub tmux. Po SIGHUP, one po prostu odłączą się od swojego już nieistniejącego terminala hosta, ale aplikacje uruchomione w terminalu, który emuluje, będą nadal działać bezgłowo i możesz ponownie podłączyć sesję do innego terminala, aby zobaczyć, jak mvposzło.

Lub użyj, nohup mvaby mvuodpornić się na SIGHUP, a jego wyjście i błędy trafią do nohup.outpliku, który możesz sprawdzić później.

Teraz nie wiem o twoim konkretnym dostawcy hostingu, ale z niektórymi, gdy wchodzisz sshdo instancji, nie zaczynasz tam sesji powłoki, ale raczej przyłączasz się do konsoli, czyli do sesji, która została już uruchomiona , a kiedy wychodzisz, nie kończysz tej sesji, po prostu odłącz się od niej. Więc skorupa nie zabija, ani nie mv. W takim przypadku zauważysz, że psucieczka stamtąd dałaby ci to samo piddla powłoki w dwóch oddzielnych sshsesjach.

Stéphane Chazelas
źródło
Więc mówisz, że mv zostanie zakończone. Proszę sprawdzić notatkę.
user4951,
2
+1. wybitna odpowiedź (ponieważ wchodzi w szczegóły, aby wyjaśnić, co się dzieje i kiedy).
Olivier Dulac,
Opracowałem artykuł na podstawie twoich odpowiedzi . Mam nadzieję, że ktoś uzna to za pomocne.
x-yuri