Czy jest jakiś sposób na zapisanie sesji Tmux? Innymi słowy, czy po ponownym uruchomieniu komputera zawsze stracę sesje?
*** System restart required ***
Czy jest jakiś sposób na zapisanie sesji Tmux? Innymi słowy, czy po ponownym uruchomieniu komputera zawsze stracę sesje?
*** System restart required ***
Odpowiedzi:
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ł”.
tmux send-keys ...
linii?
some command; if [ $? != 0 ]; then .....
jest bardziej łatwo pisać (i czytać) jako: if ! some command; then .....
.
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.
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.
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.
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.
Z powodzeniem używam https://github.com/jimeh/tmuxifier do odtwarzania sesji. Można to zainstalować bez rubinu, używając tylko git.
Próbki są dość oczywiste, np .: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh