Czy istnieje sposób, aby sesja „Screen” przetrwała restart?


25

Korzystam z narzędzia Screen i chcę zachować sesję po ponownym uruchomieniu komputera. Jeśli nie jest to możliwe, możesz polecić inne alternatywy dla Screen , które pozwoliłyby zachować sesje pomiędzy restartami.

Używam Ubuntu Server 10.04 (Lucid Lynx), jeśli to ma znaczenie.

Mam kilka sesji otwartych przez Screen. Gdy komputer uruchomi się ponownie, wszystkie te sesje zostaną utracone i muszę je ponownie otworzyć. Chciałem znaleźć sposób na zachowanie tych sesji ekranu.


co próbujesz chcesz zachować historię lub wszystko, co dzieje się w sesji ekranowej?
Marcel G

1
Czy zrobienie tego nie pokona celu ponownego uruchomienia komputera?
Brian Knoblauch,

co rozumiesz przez „sesje”? Czy masz na myśli, że masz połączenia ssh z innymi hostami w kilku oknach ekranowych? Jeśli o to ci chodzi, to napisanie pliku .screenrc i określenie użytkownika @ host, do którego chcesz slogować, powinno załatwić sprawę ..., jeśli włączyłeś ssh bez hasła. Następnie po uruchomieniu ekranu wszystkie połączenia ssh zostaną uruchomione automatycznie. Możesz nawet uruchomić go z rc.local (nieco skomplikowane, ponieważ musisz uruchomić go z su - twoja nazwa użytkownika), więc po zalogowaniu możesz ponownie dołączyć do sesji uruchomionego ekranu.
natxo asenjo

1
co ważniejsze, dlaczego ciągle się restartujesz? Serwery uniksowe nie są serwerami Windows, są zaprojektowane na czas wysokiej wydajności, wiadomo, że maszyny mają okresy pracy bez lat (bez poprawek bezpieczeństwa jądra). Jeśli restartujesz się z powodu poprawek bezpieczeństwa jądra, spójrz na coś takiego jak ksplice.
The Unix Janitor

Odpowiedzi:


16

Przede wszystkim wyjaśnijmy kilka ważnych rzeczy:

  1. Ile maszyn jest zaangażowanych? Innymi słowy, czy łączysz się ze zdalnym komputerem, czy też wszystko na twoim komputerze lokalnym?
  2. Jeśli w grę wchodzi komputer zdalny, który komputer uruchamia się ponownie: czy to serwer, czy klient?

Jeśli w grę wchodzi jedna maszyna lub serwer jest uruchamiany ponownie, przeważnie nie masz szczęścia.

Jeśli logujesz się na maszynie zdalnej, ale musisz zrestartować komputer lokalny, to nie ma problemu, dopóki uruchomisz ekran na maszynie zdalnej zamiast na komputerze lokalnym. Zdaję sobie sprawę, że jest to dość oczywiste dla każdego doświadczonego (nawet nieco doświadczonego) użytkownika ekranu, ale wspominam o tym na wszelki wypadek.

Jeszcze inną możliwością (ponownie, czy to jest dla ciebie pomocne, zależy od okoliczności) jest uruchomienie maszyny z ekranem na maszynie wirtualnej. Załóżmy, że jest to zdalny serwer fizyczny i należy go zrestartować, ale ma system operacyjny gościa (np.) VMware. Możesz zawiesić system operacyjny gościa i uruchomić go ponownie po ponownym uruchomieniu sprzętu. Wszystko zależy od tego, dlaczego musisz zrestartować komputer, który nie został określony, oraz od tego, ile masz kontroli nad maszyną i od tego, czy chcesz podjąć wszystkie te problemy.

Nie ma ŁATWEGO rozwiązania i możliwe, że żadne z tych rozwiązań nie będzie dla Ciebie odpowiednie. Ale powodzenia.

Jeśli logujesz się na wiele komputerów, może wydawać się to zbyt uciążliwe, aby uruchamiać ekran osobno na wszystkich zdalnych komputerach i tak jest. W takim przypadku przydatne jest posiadanie ekranu uruchamiania maszyny pośredniej, który może mieć wiele okien ekranu, z których każde jest zalogowane na innym komputerze zdalnym. Dopóki maszyna pośrednia pozostaje uruchomiona, możesz ponownie uruchomić własną maszynę lokalną (lub spakować ją do torby i zabrać do domu na noc, czy cokolwiek innego), a ekran nadal działa na maszynie pośredniej. (I oczywiście, jeśli którakolwiek ze zdalnych maszyn ulegnie awarii, utracisz połączenie z tą maszyną, ale reszta sesji ekranu jest w porządku.)

Ale najprawdopodobniej masz na myśli albo maszynę zdalną, albo jedyną maszynę, która zostanie zrestartowana, w takim przypadku nie ma prostego sposobu, aby to zrobić. CryoPID na początku brzmi obiecująco, ale jego strona internetowa mówi, że nie działa na ekranie.

Ale jest jeszcze jedna obiecująca opcja, którą warto zbadać. (To, czy zadziała, zależy w dużej mierze od tego, co próbujesz zrobić.) Sprawdź to na github.com: https://github.com/skoneka/screen-session/tree/master/ScreenSession/


+1 dla cryoPID, nie wiedziałem o tym!
The Unix Janitor

ScreenSession wygląda interesująco, z opisu tego właśnie tego chciałem
Sergey G

5

W niektórych rzadkich okolicznościach jest to możliwe (patrz CryoPID lub CryoPID2 ), ale ogólnie jest to trudne, więc nie można tego zrobić.


Link jest zepsuty.
kasperd

4

Zamiast używać ekranu, użyj małej maszyny wirtualnej Virtualbox i pracuj w tym. Następnie możesz po prostu hibernować go, ponownie uruchomić hosta, a następnie obudzić maszynę wirtualną z powrotem (podobnie jak zamykanie i ponowne otwieranie pokrywy laptopa). Połączenia SSH ze zdalnymi hostami prawdopodobnie nie utrzymają się przy użyciu tej metody, nie sądzę, że można by to zagwarantować.


Właściwie chciałbym zaktualizować swoją odpowiedź na tmux-resurrect
Gajusz

tmux-resurrect wygląda na bardzo dobre rozwiązanie.
serv-inc


1

W tym wszystkim sam ekran jest dość marginalny. To nie ekran, który chcesz „zapisać”, prawda ?, ale środowiska w różnych sesjach ekranu, czymkolwiek one są.

Wydaje się, że sugerujesz, że zapisanie sesji Screen obejmowałoby proces SSH wewnątrz niej i wszelkiego rodzaju. To, co dzieje się w Screen, nie jest w ogóle sprawą Screena i są to rzeczy, które trudno byłoby „uratować” ... cokolwiek by to naprawdę znaczyło, gdyby można je było wdrożyć.

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.