Przywróć sesję tmux po restarcie

255

Czy jest jakiś sposób na zapisanie sesji Tmux? Innymi słowy, czy po ponownym uruchomieniu komputera zawsze stracę sesje?

Kendall B.
źródło
1
Możesz hibernować na dysk jako alternatywę
Mâtt Frëëman
36
Hibernacja jest alternatywą dla ciągłego działania komputera, a nie ponownego uruchamiania.
chepner
5
@chepner: Są takie dni, kiedy*** System restart required ***
karatedog
2
@karatedog Tak, więc oboje zgadzamy się, że hibernacja nie jest rozwiązaniem utraty sesji tmux po ponownym uruchomieniu.
chepner

Odpowiedzi:

170

Tak, jeśli uruchomisz ponownie komputer, stracisz sesje. Sesji nie można zapisać. Ale można je skryptować. W rzeczywistości większość polega na napisaniu scenariusza do niektórych sesji, aby można je było ponownie utworzyć. Oto na przykład prosty skrypt powłoki, aby utworzyć sesję:

#!/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

Oto, co robi. Najpierw sprawdza, czy istnieje już jakaś sesja o tej nazwie (w tym przypadku bardzo oryginalna nazwa to „skrypt”) z tmux has-session . Sprawdza kod powrotu. Jeśli trwa już sesja o tej nazwie, pomija cykl „if” i przechodzi bezpośrednio do ostatniego wiersza, w którym dołącza się do sesji. W przeciwnym razie tworzy sesję i wysyła do niej kilka kluczy (na razie uruchamiam losowy skrypt). Następnie wychodzi z bloku „if” i dołącza się.

To bardzo trywialna próbka. Przed dołączeniem możesz utworzyć wiele okien, paneli itp.

Nie będzie to jednak to samo, o co prosiłeś. Jeśli wprowadzisz jakieś zmiany w sesji, na przykład zmienisz nazwę okna i utworzysz w nim nowe okienko, jeśli zrestartujesz się, zmiany te oczywiście nie zostaną zapisane.

Istnieje kilka narzędzi, które ułatwiają proces sesji skryptowych, chociaż wolę robić rzeczy ręcznie (myślę, że jest to bardziej uniwersalne). Te narzędzia to Tmuxinator i Teamocil .

Moim głównym źródłem informacji była książka Tmux „The Pragmatic Regał”.

Dakatine
źródło
1
nie brzmi tak, że to zrobi nic, jeśli chcę przywrócić sesję z 5 otwartymi plikami. Nie możesz tego zrobić?
chovy
4
Tmux nie wie nic o stanie procesów, które mogłeś mieć. Możesz napisać skrypt, otwierając te same pliki, używając polecenia „send-keys” lub „split-window” jako „vim file1 file2 file3” lub zajrzyj do zarządzania sesją edytora (vim -S i tym podobne)
bloy
Jaki jest cel tmux send-keys ...linii?
Dominykas Mostauskis
2
@DominykasMostauskis to polecenie wysyła naciśnięcia klawiszy do określonej sesji. To jak wchodzenie w sesję i wprowadzanie tych samych klawiszy z klawiatury. W takim przypadku wysyłasz „~ / bin / script”, a następnie Enter.
Dakatine
1
kombinacja some command; if [ $? != 0 ]; then .....jest bardziej łatwo pisać (i czytać) jako: if ! some command; then ......
fonini
117

Napisałem prosty skrypt bash, który w każdym z nich trwa otwarte sesje tmux, okna i bieżące katalogi robocze.

Nazwij to tak ręcznie lub okresowo z crona (bo możesz zapomnieć):

tmux-session save

Napisze do ~/.tmux-session. Przywróć je po ponownym uruchomieniu w następujący sposób:

tmux-session restore

Uważam to za znacznie lepsze niż kilkaset-liniowy skrypt Perla.

mislav
źródło
Czy to tylko jeśli masz jedną sesję tmux?
Sevenearths
86

Napisałem wtyczkę tmux, która umożliwia zapisanie pełnego środowiska tmux i przywrócenie go później. Stara się być bardzo szczegółowy, abyś miał wrażenie, że nigdy nie rezygnujesz z Tmux.

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

Aktualizacja: teraz dostępna jest wtyczka tmux-continuum, która wykonuje automatyczne zapisywanie w tle środowiska tmux. Opcjonalnie * automatycznie * przywraca tmux env po ponownym uruchomieniu komputera.


źródło
Właśnie kiedy zamieściłem swoją „odpowiedź” z tym samym linkiem, którego szukałem - „do'h!” Znaleziono to podczas próby zapamiętania, jak nazywała się Twoja wtyczka.
phatskat
Ta wtyczka nie jest zła, ale nie przywróciła wszystkich moich programów. Przeczytam więcej twoich dokumentów i być może prześle problem na github.
Arne,
@Arne W zależności od programu może to wymagać kontrolowania programu. Zamiast tego poleciłbym skonfigurować twoje programy do przywracania - trwałe pliki .vimrc i pozycje kursora dla vima itp. - i przechowywać tmux pane_current_command dla programów takich jak man, które można ponownie otworzyć. Checkpointing jest moim zdaniem bardzo skomplikowany, ale w każdym razie warto go przeanalizować.
John P
@ Bruno-Sutic Jaka jest różnica między wtyczką (Tmux-Resurrect) a Tmux-Coninuum?
lony
Obecnie muszę załatać kontinuum w ten sposób, aby działało github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol
10

tmuxinator to narzędzie napisane w Rubim, które może być użyte do łatwego tworzenia i zarządzania sesjami tmux. Można go użyć do stworzenia projektu, który później można utworzyć jako sesję tmux.

Praveen Kumar
źródło
5

Rozważ to częściowe rozwiązanie znalezione tutaj

Autor tworzy funkcję, która zapisuje historię sesji tmux w celu utrzymania stanu sesji tmux po ponownym uruchomieniu serwera.

greg
źródło
17
Czy możesz napisać, co mówią? Linki mogą gnić.
cpast
1
@cpast: To prawda, ale komentarze mogą również gnić. Najlepiej podać oba :)
danielpops 21.04.16
6
@greg Twój link zwraca 404
rofrol