Spraw, by ekran GNU przetrwał restart

18

Często używam ekranu GNU. Uważam za bardzo denerwujące, że za każdym razem, gdy serwer musi zostać ponownie uruchomiony, tracę wszystkie sesje (nawet jeśli wiem z góry, muszę wszystko ponownie skonfigurować).

Szukałem w sieci możliwości ponownego uruchomienia ekranu, ale nie znalazłem nic, co by mi odpowiadało. Niektóre metody, które znalazłem i są wady:

  • CryoPID : wydaje się być martwy, obiecując, że od 2005 roku będzie zawierać obsługę ekranu
  • DMCTP : ma problemy z setuid (), nie działało dla mnie (przyznaję, że nie bardzo się starałem)
  • jakiś skrypt próbuje odtworzyć sesję od zera; wciąż tracisz swoją historię i myślę, że również zmienne środowiskowe nie są ustawione poprawnie (a kiedy próbowałem, nie wywołały wszystkich sesji)

Może ktoś zna lepszą zamrażarkę procesową? To wydaje się być najbardziej obiecującym sposobem.

fuenfundachtzig
źródło
Może powinieneś hibernować zamiast restartować :-) Pamiętam, że używałem DMCTP dawno, dawno temu i zadziałało (IIRC, ale nie jestem pewien ...)
lenistwo
1
W większości przypadków aktualizacje jądra lub wymiany sprzętu wymuszają ponowne uruchomienie. (I tak nie zależy ode mnie ...) - DMCTP: Byłbym zainteresowany tym, jak sprawić, by działał bez ponownej kompilacji ekranu (jak sugeruje to w Internecie).
fuenfundachtzig
1
Używam tmux zamiast screena i łatwiej jest mi pisać skrypty sesji. To nie „zapisuje” twojej sesji, ale możesz łatwo wysyłać polecenia do tmux, aby wykonać swój układ i wysyłać „naciśnięcia klawiszy” do klienta, aby w razie potrzeby zmienić katalog i uruchomić aplikacje. Jestem pewien, że możesz to zrobić również na ekranie, ale z tmux wydaje się to łatwiejsze

Odpowiedzi:

13

Nie ma sposobu, aby zapisać sesję ekranu w pożądany sposób. To, co zrobiłem, było kolejną najlepszą rzeczą: skryptowy autossh, aby połączyć się z moimi serwerami i skonfigurować mój system tak, jak lubię.

Kocham to.

Połączenie lokalne nie działa, czekam, ono wróci i jest moja praca (używam zagnieżdżonych ekranów). Serwer wyłączony lub ponownie uruchomiony, czekam i wracam do domyślnej pozycji. Daje mi to poczucie ciągłości, którego pragnąłem.

W każdym razie zadałem dokładnie to pytanie lata temu na liście ekranowej.

Podsumowanie: Nie szukaj życia wiecznego na ekranie. Zamiast tego naucz się wskrzeszać.

Oto mięso konfiguracji .screenrc:

Jest przykład rscreen w pakiecie autossh, który zmodyfikowałem w programie econnect.

Parametr --esc służy do ustawienia zdalnej ucieczki ekranu na coś innego (moja ucieczka to `)

#add much much more scrollback
defscrollback 10000

# make some default windows

screen -t ADMIN     1
chdir /Users/chiggsy/Sites/
screen -t SITES    2
chdir /Users/chiggsy/src/
screen -t SRC 3
chdir
screen -t FERGUS  4 /Users/chiggsy/bin/econnect --host host.example.com --port 50000 --esc g --user sol
screen -t LAEG 5  /Users/chiggsy/bin/econnect --host host.example2.com --port 505000  --esc g --user invictus

screen -t ROOT      0   sudo su -m
chiggsy
źródło
2

Zobacz: http://skoneka.github.io/screen-session/

Available screen-session modes: 

---- 
save              - save Screen ( and VIM ) session 
load              - load session 
ls                - list saved sessions 
---- 

dump              - print detailed informations about windows in the session 
group             - move windows to a group 
layoutlist        - display a list of layouts 
layout-checkpoint - record a snapshot of the current layout. 
layout-history    - display saved snapshots of the current layout 
layout-redo       - load a snapshot of the current layout, 
layout-undo       - load a snapshot of the current layout, 
layout-zoom       - zoom into and out of a region 
kill              - send SIGTERM to last the process started in a window 
kill-zombie       - kill all zombie windows in the session 
kill-group        - recursively kill all windows in a group 
manager           - sessions manager (screenie like) but featuring session 
                    preview in a split window 
nest-layout       - copy a layout to the current region 
new-window        - start a new Screen window in the same working directory 
                    on the position next to the current window 
name              - get or set the sessionname 
regions           - display a number in every region (like tmux display-panes) 
renumber          - renumber windows to fill gaps 
subwindows        - recursively print windows contained in groups 
Erik Aronesty
źródło
2

W przypadku błędu serwera to samo pytanie otrzymało jedną wskazówkę, której tu brakuje: użyj tmuxz tmux-resurrect , czyli:

Przywróć tmuxśrodowisko [s] po ponownym uruchomieniu systemu.

Co może przywrócić dla Ciebie:

  • wszystkie sesje, okna, panele i ich kolejność
  • bieżący katalog roboczy dla każdego panelu
  • dokładne układy okien w oknach (nawet po powiększeniu)
  • sesja aktywna i alternatywna
  • aktywne i alternatywne okno dla każdej sesji
  • okna z ostrością
  • aktywny panel dla każdego okna
  • „zgrupowane sesje” (przydatna funkcja przy korzystaniu z Tmux z wieloma monitorami)
  • programy działające w okienku! Więcej szczegółów w dokumencie przywracania programów .
serv-inc
źródło