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ę:
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ł”.
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 ......
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.
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.
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?
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.
*** 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ę:
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ł”.
źródło
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ć):
Napisze do
~/.tmux-session
. Przywróć je po ponownym uruchomieniu w następujący sposób:Uważam to za znacznie lepsze niż kilkaset-liniowy skrypt Perla.
źródło
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
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.
źródło
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.
źródło
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
źródło