Stellen Sie die tmux-Sitzung nach dem Neustart wieder her


255

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


1
Sie können alternativ den Ruhezustand auf Festplatte
aktivieren

36
Der Ruhezustand ist eine Alternative dazu, den Computer ständig laufen zu lassen und nicht neu zu starten.
Chepner

5
@chepner: Es gibt jene Tage, an denen*** System restart required ***
Karatedog

2
@karatedog Ja, wir sind uns beide einig, dass der Ruhezustand keine Lösung ist, um Ihre tmux-Sitzung beim Neustart zu verlieren.
Chepner

Antworten:


170

Ja, wenn Sie Ihren Computer neu starten, gehen die Sitzungen verloren. Sitzungen können nicht gespeichert werden. Sie können jedoch mit Skripten versehen werden. Tatsächlich besteht das meiste darin, einige Sitzungen per Skript zu erstellen, damit Sie sie neu erstellen können. Hier ist zum Beispiel ein einfaches Shell-Skript zum Erstellen einer Sitzung:

#!/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 geprüft, ob es eine Sitzung mit diesem Namen gibt (in diesem Fall lautet der ursprüngliche Name "script"), die mit tmux has-session ausgeführt wird . Es überprüft den Rückkehrcode. Wenn es bereits eine laufende Sitzung mit diesem Namen gibt, überspringt sie den "Wenn" -Zyklus und wechselt direkt zur letzten Zeile, in der sie der Sitzung angehängt wird. Andernfalls wird eine Sitzung erstellt und einige Schlüssel an diese gesendet (derzeit wird nur ein zufälliges Skript ausgeführt). Dann wird der "if" -Block verlassen und angehängt.

Dies ist eine sehr triviale Stichprobe. Sie können vor dem Anhängen mehrere Fenster, Fensterbereiche und dergleichen erstellen.

Dies wird jedoch nicht genau das sein, wonach Sie gefragt haben. Wenn Sie Änderungen an der Sitzung vornehmen, beispielsweise ein Fenster umbenennen und ein neues Fenster erstellen, werden diese Änderungen beim Neustart natürlich nicht gespeichert.

Es gibt einige Tools, die das Erstellen von Skripten vereinfachen. Ich bevorzuge es jedoch, die Dinge manuell zu erledigen (ich denke, es ist vielseitiger). Diese Tools sind Tmuxinator und Teamocil .

Meine Hauptinformationsquelle war das Tmux-Buch "The Pragmatic Bookshelf".


1
klingt nicht so, wird nichts tun, wenn ich eine Sitzung mit 5 geöffneten Dateien wiederherstellen möchte. Keine Möglichkeit das zu tun?
Chovy

4
Tmux weiß nichts über den Status von Prozessen, die möglicherweise ausgeführt wurden. Sie können ein Skript mit denselben Dateien erstellen, indem Sie den Befehl 'send-keys' oder 'split-window' auf 'vim file1 file2 file3' setzen oder in die Sitzungsverwaltung Ihres Editors schauen (vim -S und dergleichen)
bloy

Was ist der Zweck der tmux send-keys ...Linie?
Dominykas Mostauskis

2
@DominykasMostauskis dieser Befehl sendet Tastendrücke an die angegebene Sitzung. Es ist so, als ob Sie die Sitzung betreten und genau diese Tasten über die Tastatur eingeben. In diesem Fall senden Sie "~ / bin / script" gefolgt von der Eingabetaste.
Dakatine

1
die Kombination some command; if [ $? != 0 ]; then .....ist einfach zu schreiben (und lesen) , wie: if ! some command; then ......
Fonini

117

Ich habe ein einfaches Bash-Skript geschrieben , das geöffnete tmux-Sitzungen, Fenster und aktuelle Arbeitsverzeichnisse in jedem von ihnen beibehält.

Rufen Sie es wie folgt manuell oder periodisch von cron aus auf (weil Sie es vielleicht vergessen haben):

tmux-session save

Es wird an 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.


Geht das nur, wenn Sie eine TMUX-Sitzung haben?
Sieben Tage,

86

Ich habe ein tmux-Plugin geschrieben, mit dem Sie die gesamte tmux-Umgebung speichern und später wiederherstellen können. Es ist bestrebt, wirklich detailliert zu sein, damit Sie das Gefühl haben, nie aufhören zu müssen.

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

Update: Jetzt gibt es ein tmux-continuum- Plugin, das automatische Hintergrundspeicherungen der tmux-Umgebung durchführt. Optional wird auch * automatisch * tmux env nach dem Neustart des Computers wiederhergestellt.


Gerade als ich meine "Antwort" mit dem gleichen Link gepostet habe, habe ich nachgeschlagen - "do'h!" Fand dies beim Versuch, sich zu erinnern, wie Ihr Plugin genannt wurde.
Phatskat

Dieses Plugin ist nicht schlecht, hat aber nicht alle meine Programme wiederhergestellt. Lesen Sie mehr von Ihren Dokumenten und senden Sie möglicherweise eine Ausgabe auf github.
Arne

@Arne Je nach Programm ist möglicherweise eine Programmüberprüfung erforderlich. Stattdessen würde ich empfehlen, Ihre Programme für die Wiederherstellung zu konfigurieren - dauerhafte .vimrc-Dateien und Cursorpositionen für vim usw. - und den Befehl tmux pane_current_command für Programme wie man zu speichern, die erneut geöffnet werden können. Checkpointing ist meiner Meinung nach sehr kompliziert, aber auf jeden Fall einen Blick wert.
John P

@ bruno-sutic was ist der Unterschied zwischen deinem Plugin (tmux-resurrect) und tmux-coninuum?
Lony

Derzeit musste ich Continuum so patchen, damit es funktioniert. Github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol

10

tmuxinator ist ein in Ruby geschriebenes Tool, mit dem Sie mühelos tmux-Sitzungen erstellen und verwalten können. Es kann verwendet werden, um ein Projekt zu erstellen, das später als tmux-Sitzung instanziiert werden kann.


5

Betrachten Sie diese Teillösung, die Sie hier finden

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


17
Könnten Sie bitte posten, was sie sagen? Links können verrotten.
2.

1
@cpast: Das stimmt, aber Kommentare können auch verrotten. Am besten beides :)
danielpops

6
@greg Dein Link gibt 404
rofrol 21.12.18

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.