Frage Wiederherstellen der tmux-Sitzung nach dem Neustart


Gibt es eine Möglichkeit, eine tmux-Sitzung zu speichern? Mit anderen Worten, wenn ich den Computer neu starte, verliere ich immer die Sitzungen?


214
2018-06-21 04:17


Ursprung


Sie können den Ruhezustand auf Festplatte als Alternative verwenden - Mâtt Frëëman
Hibernating ist eine Alternative, um Ihren Computer ständig laufen zu lassen, nicht neu zu starten. - chepner
@chepner: Es gibt Zeiten, in denen *** System restart required *** - karatedog
@karatedog Ja, also sind wir uns einig, dass der Ruhezustand keine Lösung für den Verlust der tmux-Sitzung beim Neustart ist. - chepner


Antworten:


Ja, wenn Sie Ihren Computer neu starten, verlieren Sie die Sitzungen. Sitzungen können nicht gespeichert werden. Aber sie können gescriptet werden. Was die meisten tun Skript einige Sitzungen, damit Sie sie neu erstellen können. Zum Beispiel ist hier ein triviales Shell-Skript, um eine Sitzung zu erstellen:

#!/bin/zsh                                                                                                   

SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null

if [ $? != 0 ] 
 then
    tmux new-session -s $SESSIONNAME -n script -d
    tmux send-keys -t $SESSIONNAME "~/bin/script" C-m 
fi

tmux attach -t $SESSIONNAME

Hier ist, was es tut. Zuerst wird überprüft, ob bereits eine Sitzung mit diesem Namen (in diesem Fall ist der sehr ursprüngliche Name "script") mit tmux hat eine Sitzung. Es überprüft den Rückgabecode. Wenn bereits eine Sitzung mit diesem Namen läuft, überspringt sie den "if" -Zyklus und geht direkt zur letzten Zeile, wo sie an die Sitzung angehängt wird. Andernfalls erstellt es eine Sitzung und sendet einige Schlüssel an sie (nur ein zufälliges Skript für jetzt ausgeführt). Dann wird der "if" -Block verlassen und angehängt.

Das ist ein sehr triviale Probe. Sie können vor dem Anhängen mehrere Fenster, Fensterbereiche und Ähnliches erstellen.

Dieser Wille nicht aber genau das, wonach du gefragt hast. Wenn Sie Änderungen an der Sitzung vornehmen, z. B. wenn Sie ein Fenster umbenennen und ein neues Fenster darin erstellen, werden diese Änderungen beim Neustart natürlich nicht gespeichert.

Es gibt einige Tools, die den Ablauf von Skripts erleichtern, obwohl ich es vorziehe, Dinge manuell zu machen (ich denke, dass es vielseitiger ist). Diese Werkzeuge sind Tmuxinator und Teamocil.

Meine Hauptquelle für Informationen war "The Pragmatic Bookshelf" Tmux Buch.


140
2018-06-22 08:58



klingt nicht so, wenn ich eine Sitzung mit 5 geöffneten Dateien wiederherstellen möchte. Keine Möglichkeit, das zu tun? - chovy
Tmux weiß nichts über den Status der Prozesse, die Sie ausgeführt haben könnten. Du könntest das Skript haben gleich Öffnen Sie die Dateien, indem Sie den Befehl 'send-keys' oder 'split-window' verwenden 'vim file1 file2 file3' oder schauen Sie in die Sitzungsverwaltung Ihres Editors (vim -S und ähnliches) - bloy
Was ist der Zweck der tmux send-keys ... Linie? - Dominykas Mostauskis
@DominykasMostauskis diesen Befehl sendet Taste drückt auf die angegebene Sitzung. Es ist so, als würde man die Sitzung betreten und diese Tasten über die Tastatur eingeben. In diesem Fall senden Sie "~ / bin / script" gefolgt von "Enter". - Dakatine
Kann ich das Skript ssh login mit Benutzernamen und pass weitergeben? (Ich weiß, dass es nicht gesichert ist, will nur wissen, ob es für Systeme möglich ist, in denen es mir nicht um die Sicherheit geht, aber ich muss noch Benutzer und Pass haben). - Jas


Ich habe ein einfaches Bash-Skript geschrieben Das hält offene tmux-Sitzungen, Windows und aktuelle Arbeitsverzeichnisse in jedem.

Nennen Sie es so manuell oder periodisch von Cron (weil Sie vielleicht vergessen):

tmux-session save

Es wird schreiben ~/.tmux-session. Stellen Sie sie nach dem Neustart wie folgt wieder her:

tmux-session restore

Ich finde das viel besser als ein mehrere hundert Zeilen langes Perl-Skript.


100
2017-07-04 22:37





Ich habe ein tmux-Plugin geschrieben, mit dem Sie die komplette tmux-Umgebung speichern und später wiederherstellen können. Es ist bestrebt, sehr detailliert zu sein, damit Sie das Gefühl haben, dass Sie tmux niemals verlassen.

https://github.com/tmux-plugins/tmux-resurrect

Update: Jetzt gibt es ein TMUX-Kontinuum Plugin, das automatische Hintergrundspeicherung der TMU-Umgebung durchführt. Optional stellt es auch * automatisch * tmux env nach dem Neustart des Computers wieder her.


66
2017-08-30 09:16



Gerade als ich meine "Antwort" mit demselben Link gepostet habe, habe ich nachgeschlagen - "Do'h!" Fand dies, während du versuchst dich daran zu erinnern, wie dein Plugin aufgerufen wurde. - phatskat
Dieses Plugin ist nicht schlecht, aber es hat nicht alle meine Programme wiederhergestellt. Wird mehr von Ihren Dokumenten lesen und vielleicht ein Problem auf GitHub einreichen. - Arne
@Arne Abhängig vom Programm kann dies eine Programm-Prüfpunktfunktion erfordern. Stattdessen würde ich empfehlen, Ihre Programme so zu konfigurieren, dass sie - persistente .vimrc-Dateien und Cursorpositionen für vim usw. - wiederherstellen und den Befehl tmux pane_current_command für Programme wie man speichern, die wieder geöffnet werden können. Checkpointing ist meiner Meinung nach sehr kompliziert, aber es lohnt sich auf jeden Fall einen Blick darauf zu werfen. - John P
@ bruno-sutic was ist der Unterschied zwischen Ihrem Plugin (tmux-resurrect) und tmux-coninuum? - lony


TMUXINATOR ist ein in Ruby geschriebenes Tool, mit dem man leicht tmux-Sitzungen erstellen und verwalten kann. Es könnte verwendet werden, um ein Projekt zu erstellen, das später als tmux-Sitzung instanziiert werden kann.


10
2018-06-26 17:40





Betrachten Sie diese gefundene Teillösung Hier

Der Autor erstellt eine Funktion, die den Verlauf der tmux-Sitzung speichert, um den Zustand der tmux-Sitzung nach einem Neustart des Servers beizubehalten.


5
2018-02-02 21:54



Könnten Sie bitte posten, was sie sagen? Links können verrotten. - cpast
@cpast: Das stimmt, aber Kommentare können auch verrotten. Am besten, beide zu geben :) - danielpops