Kontynuuj działanie sesji SSH po rozłączeniu


208

Czasami mam długotrwałe procesy, które chcę rozpocząć przed powrotem do domu, więc tworzę sesję SSH na serwerze, aby rozpocząć proces, ale potem chcę zamknąć laptopa i wrócić do domu, a później, po obiedzie, chcę sprawdź proces, który rozpocząłem przed wyjściem z pracy. Jak mogę to zrobić za pomocą SSH? Rozumiem, że jeśli przerwiesz połączenie SSH, przerwiesz także sesję logowania na serwerze, tym samym zabijając długo działający proces.

Odpowiedzi:


205

Użyj, nohupaby proces zignorował sygnał zawieszenia:

$ nohup long-running-process &
$ exit

20
To jest to. Nie trzeba instalować screena ani tmuxa. To właściwie stary dobry sposób na zrobienie tego. Oczywiście „screen” lub „tmux” to cudowne aplikacje i powinny być używane w razie potrzeby, ale tak proste, jak uruchomienie procesu w tle, z którego można się wylogować, przejdź do powyższego.
reiche

2
czy nohup jest jak disown?
cjac

28
Mają podobne cele, ale różnią się na wiele sposobów. nohupprzechwytuje SIGHUP tak, że gdy powłoka, która go uruchomiła, kończy pracę i wysyła SIGHUP do wszystkich wciąż działających dzieci, long-running-processnie umiera. disownpo prostu usuwa określone zadanie z listy potomków Basha, aby w ogóle nie próbowało wysłać SIGHUP. nohupto program niezależny od powłoki, więc działa ze wszystkimi powłokami, podczas gdy disownjest wbudowany w Bash. nohupakceptuje polecenie uruchomienia, podczas gdy disowndziała tylko po uruchomieniu zadania i utworzeniu tła, aby można było wrócić do powłoki.
Warren Young,

3
Niesamowita szybka recenzja dla tych, którzy nie są zaznajomieni z nohupem i odrzuceniem - a także kilka łatwych sposobów radzenia sobie z sesjami terminalowymi serverwatch.com/tutorials/article.php/3935306/…
Dan.

7
tail -f nohup.outaby sprawdzić, co się dzieje, gdy wrócisz.
Ricardo Stuven,

141

Chcesz używać GNU Screen. To jest super niesamowite!

ssh me@myserver.com
screen               #start a screen session
run-a-long-process

CTRL+ a, daby oderwać się od sesji ekranowej

exit                 #disconnect from the server, while run-a-long-process continues

Po powrocie do laptopa:

ssh me@myserver.com
screen -r            #resume the screen session

Następnie sprawdź postęp swojego długotrwałego procesu!

screenjest bardzo wszechstronnym narzędziem i może zrobić znacznie więcej niż opisałem. Podczas sesji ekranowej spróbuj ctrl + a ,? nauczyć się kilku typowych poleceń. Prawdopodobnie najczęstsze to:

  • CTRL+ a, caby utworzyć nowe okno
  • CTRL+ a, naby przejść do następnego okna w sesji ekranu
  • CTRL+ a, paby przejść do poprzedniego okna w sesji ekranu
  • jeśli logujesz się z kilku różnych systemów, być może przypadkowo zostałeś podłączony do aktywnej sesji ekranowej na innym komputerze. z tego powodu zawsze wznawiam, screen -d -raby upewnić się, że jeśli do mojej sesji ekranu zostanie dołączona inna powłoka, zostanie ona odłączona przed wznowieniem jej w moim bieżącym systemie.

8
tmux to nowoczesny analog ekranu.
zvolkov

Nie wiem o nowoczesnych, ale domyślny prefiks klucza tmux (Ctrl + b) pomaga, jeśli jesteś przyzwyczajony do bash / emacs keys.
sajith,

2
ekran jest całkiem fajny, jeśli chcesz mieć wspólny terminal z jakiegoś powodu. Utwórz ekran screen -S namei pozwól, aby drugi znajomy się z nim połączyć screen -x name.
Patrick,

1
tmuxz tmuxinatorjest świetnym połączeniem do fantazyjnych konfiguracji, a ja wolę screenjako szybkie i proste rozwiązanie.
earthmeLon

Ta odpowiedź jest najlepsza .. Podoba mi się. Doskonałe badania
Jaffer Wilson

42

Jeśli nie planowałeś wcześniej i nie skonfigurowałeś screenitp., Po prostu wykonaj następujące czynności:

  1. Jeśli proces działa w tle: goto # 3, w przeciwnym razie: Ctrl-Zaby zawiesić proces pierwszego planu. Spowoduje to zgłoszenie numeru zadania zawieszonego procesu, na przykład:

    [1]+  Stopped                 processName
    
  2. Wyślij processNamedo tła za bg %1pomocą (używając tego, co # wykonuje po %). To zostanie wznowione processNamew tle.

  3. Usuń processName z disown %1lub disown PID. Użyj -hflagi, jeśli chcesz zachować własność do momentu zakończenia bieżącej powłoki.


5
Dzięki za to! Miałem pracę i myślałem, że nie będę w stanie jej utrzymać, ponieważ nie korzystałem z niej, &kiedy ją rozpocząłem. To wydaje się działać świetnie!
Matt

4
To jest niesamowite! Nigdy nie wiedziałem, że Linux może pozwolić ci przenieść kontrolę nad takimi aktywnymi procesami. Bałem się, że moja bateria zginie podczas SSH'owania na moim serwerze w trakcie długiego procesu, i to była dla mnie odpowiedź!
Pluton

14

To, czego chcesz użyć, to screen, a jeszcze lepiej przyjazne dla użytkownika opakowanie wokół ekranu o nazwie byobu.

Screen pozwala na uruchomienie wielu wirtualnych sesji terminalowych w tej samej sesji ssh. Dostępne są samouczki i strony pomocy .

byobu to opakowanie, które pozwala łatwo otwierać nowe ekrany za pomocą prostego klawisza funkcyjnego zamiast kombinacji klawiszy z ctrl-a. Pokazuje także linię statusu ze wszystkimi otwartymi wirtualnymi terminalami, które można nazwać.

Inną ciekawą funkcją jest fakt, że cały ekran może pozostać włączony, gdy połączenie ssh jest rozłączone. Po prostu łączysz się ponownie przez ssh i dzwonisz byobu i wszystko jest jak wcześniej.

Nareszcie zrzuty ekranu z Byobu.


Uruchomiłem proces na moim serwerze w Terminalu Byobu, tak naprawdę nie wiedząc, co to jest (właśnie przeszukałem Terminal i kliknąłem Byobu, ponieważ nigdy wcześniej go nie widziałem). Nadal używałem Byobu, ponieważ na dole miał kolorowy pasek stanu i myślałem, że to fajne. Dzisiaj chciałem uzyskać dostęp do tej sesji terminala zdalnie przez SSH. Wszystko, co musiałem zrobić, to wpisać „byobu” i od razu pokazało to sesję terminala. Naprawdę szczęśliwy, że natknąłem się na byobu!
nick

8

Warto to zauważyć

ssh -t lala screen -rxU moodołączy do sesji moo na lali hosta

ssh -t lala screen -S mooutworzy sesję moo na lali hosta

i

ssh -t lala screen -S moo quuxstworzy moo sesję na hosta Lala i uruchomić program quux , kończenie sesji w dniu zakończenia.


3

Stare pytanie, dziwne, wciąż nikt nie radził Tmuxowi , który działa jak opakowanie dla n konsol i utrzymuje je otwarte, dopóki nie będą potrzebne. Pozwala to na większą kontrolę, oprócz wielu funkcji, które posiada tmux. Łatwo nim zarządzać, po prostu uruchom tmux, który wprowadza cię do powłoki, uruchom swoją dłuższą pracę, a następnie naciśnij ctrl + b, a następnie d (odłącz) ( ctrl+bto „ok google” tmux i djest to polecenie zamknięcia bez wyjścia z powłoki). To faktycznie działa, jeśli po prostu zamkniesz, na przykład kit. Po obiedzie, kiedy ponownie się połączysz, możesz ponownie otworzyć tmux, tmux attachaby zobaczyć ekran dokładnie tak, jak opuściłeś. Coś, co uwielbiam, to podzielenie okienka: ctrl+ba następnie naciśnij ". Aby przejść z jednego panelu do drugiego, ctrl+ba następnie naciśnij przycisk strzałki w górę / w dół.


3

Dobry przewodnik znajdziesz tutaj: utrzymuj działanie sesji SSH podczas rozłączania

sudo apt-get install screen

Teraz możesz rozpocząć nową sesję ekranu, wpisując screen w wierszu poleceń. Pojawi się kilka informacji o ekranie. Naciśnij Enter, a pojawi się normalny monit.

Aby rozłączyć (ale pozostawić sesję uruchomioną), naciśnij Ctrl+, Aa następnie Ctrl+ Dnatychmiast po sobie. Zobaczysz komunikat [odłączony]

Aby ponownie połączyć się z już uruchomioną sesją

screen -r

Aby ponownie połączyć się z istniejącą sesją lub utworzyć nową, jeśli taka nie istnieje

screen -D -r

Aby utworzyć nowe okno wewnątrz ekranu działa sesja Hit Ctrl+ A, a następnie Cw bezpośrednim rzędu. Zobaczysz nowy monit.

Aby przełączyć z jednego okna ekranowego do drugiego Hit Ctrl+, Aa następnie Ctrl+ Anatychmiast po sobie.

Do listy otwartych okien na ekranie Hit Ctrl+ A, a następnie Ww bezpośrednim rzędu


Możesz użyć, <kbd>Ctrl</kbd>aby wyświetlić nazwy jako klawisze klawiatury.
Tomasz

1

Używam NX NoMachine, który jest dla mnie darmowy, ponieważ to tylko ja. Zasadniczo uruchamia sesję X na serwerze, z którą można się łączyć i rozłączać od nowa. Sesja X działa, gdy nie masz połączenia. Połączenia można nawiązywać z dowolnego miejsca. Możesz wybierać między ruchomymi oknami lub pojedynczym oknem zawierającym cały pulpit (np. Kompletny pulpit Gnome). Klient (który można uruchomić na laptopie) można uruchomić w systemie Linux, MacOS, Solaris lub Microsoft Windows. W tym drugim przypadku, jeśli wybierzesz pływające okna, pojawią się one osobno na pasku zadań systemu Windows.

Używam laptopa z systemem Windows XP (którego potrzebuję do określonego sprzętu Windows, który mam) jako interfejsu dla moich dwóch serwerów Linux korzystających z NX Nomachine. Mogę nawet drukować na drukarce podłączonej do mojego laptopa z systemem Windows z systemu Linux.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.