Lassen Sie den GNU-Bildschirm den Neustart überleben


18

Ich benutze viel GNU-Bildschirm. Ich finde es sehr ärgerlich, dass ich jedes Mal, wenn der Server neu gestartet werden muss, alle meine Sitzungen verliere (auch wenn ich vorher weiß, dass ich alles neu einrichten muss).

Ich habe im Internet nach Möglichkeiten gesucht, wie der Bildschirm einen Neustart überlebt, aber nichts gefunden, das für mich funktioniert. Einige der Methoden, die ich gefunden habe und deren Fehler:

  • CryoPID : scheint tot zu sein und verspricht seit 2005 Unterstützung für den Bildschirm
  • DMCTP : hat Probleme mit setuid (), hat bei mir nicht funktioniert (ich gebe zu, ich habe mich nicht sehr angestrengt)
  • ein Skript, das versucht, die Sitzung von Grund auf neu zu erstellen; Sie verlieren immer noch Ihren Verlauf und ich denke, auch die Umgebungsvariablen sind nicht richtig gesetzt (und als ich es versuchte, wurden nicht alle Sitzungen aufgerufen)

Vielleicht kennt jemand einen besseren Prozess-Gefrierschrank? Dies scheint der vielversprechendste Weg zu sein.


Vielleicht solltest du dich in den Ruhezustand versetzen, anstatt neu zu starten :-) Ich erinnere mich, dass ich DMCTP vor langer, langer Zeit verwendet habe und es funktionierte (IIRC, aber ich bin nicht sicher ...)
Faultier

1
In den meisten Fällen sind dies Kernel-Updates oder Hardware-Ersetzungen, die einen Neustart erzwingen. (Das liegt sowieso nicht an mir ...) - DMCTP: Würde mich interessieren, wie es funktioniert, ohne den Bildschirm neu zu kompilieren (wie im Internet vorgeschlagen).
Fuenfundachtzig

1
Ich verwende tmux anstelle von screen und finde es einfacher, Sitzungsskripte zu schreiben. Das "spart" Ihre Sitzung nicht, aber Sie können ganz einfach Befehle an tmux senden, um Ihr Layout zu erstellen und "Tastenanschläge" an den Client zu senden, damit Sie das Verzeichnis wechseln und bei Bedarf Anwendungen starten können. Ich bin mir sicher, dass Sie dies auch auf dem Bildschirm tun können, aber mit tmux

Antworten:


13

Es gibt keine Möglichkeit, eine Bildschirmsitzung auf die von Ihnen gewünschte Weise zu speichern. Was ich getan habe, war das zweitbeste: Scripted Autossh, um eine Verbindung zu meinen Servern herzustellen und mein Rig so einzurichten, wie es mir gefällt.

Liebe es.

Die lokale Verbindung ist unterbrochen, ich warte, sie wird wiederhergestellt, und ich arbeite (ich verwende verschachtelte Bildschirme). Server heruntergefahren oder neu gestartet, ich warte und bin wieder in meiner Standardposition. Dies gibt mir das Gefühl der Kontinuität, das ich mir gewünscht habe.

Jedenfalls habe ich genau diese Frage vor Jahren auf der Bildschirmliste gestellt.

Zusammenfassung: Strebe nicht nach ewigem Leben für den Bildschirm. Lerne stattdessen auferstehen.

Dies ist das Fleisch der .screenrc-Konfiguration:

Es gibt ein Beispiel, rscreen, in dem autossh-Paket, das ich in das econnect-Programm geändert habe.

Der --esc-Parameter legt fest, dass die Remote-Bildschirm-Escape-Funktion auf einen anderen Wert gesetzt wird (meine Escape-Funktion lautet `).

#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

2

Siehe: 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 

2

Bei einem Serverfehler hat dieselbe Frage einen Hinweis erhalten, der hier fehlt: Verwenden Sie tmuxmit tmux-resurrect Folgendes :

Stellen Sie die tmuxUmgebung nach dem Neustart des Systems wieder her.

Was es für Sie wiederherstellen kann:

  • Alle Sitzungen, Fenster, Fenster und deren Reihenfolge
  • aktuelles Arbeitsverzeichnis für jeden Bereich
  • exakte Fensterlayouts innerhalb von Fenstern (auch beim Zoomen)
  • aktive und alternative Sitzung
  • aktives und alternatives Fenster für jede Sitzung
  • Fenster mit Fokus
  • aktiver Bereich für jedes Fenster
  • "Gruppierte Sitzungen" (nützliche Funktion bei Verwendung von tmux mit mehreren Monitoren)
  • Programme, die in einem Fenster ausgeführt werden! Weitere Details finden Sie in der Dokumentation zum Wiederherstellen von Programmen .
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.