Восстановить сеанс tmux после перезагрузки


255

Есть ли способ сохранить сеанс tmux? Другими словами, если я перезагружу компьютер, я всегда буду терять сессии?


1
Вы можете перейти на диск в качестве альтернативы
Mâtt Frëëman

36
Спящий режим - это альтернатива постоянному включению компьютера, а не перезагрузке.
chepner

5
@chepner: Есть те дни, когда*** System restart required ***
karatedog

2
@karatedog Да, поэтому мы оба согласны с тем, что гибернация не является решением проблемы потери сеанса tmux при перезагрузке.
chepner

Ответы:


170

Да, если вы перезагрузите компьютер, вы потеряете сессии. Сессии не могут быть сохранены. Но они могут быть написаны по сценарию. На самом деле большинство из них - это сценарий некоторых сессий, чтобы вы могли их заново создать. Например, вот тривиальный сценарий оболочки для создания сеанса:

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

Вот что он делает. Во-первых, он проверяет, существует ли уже сессия с таким именем (в данном случае, очень оригинальное имя «script») с помощью tmux has-session . Проверяет код возврата. Если с таким именем уже есть текущий сеанс, он пропускает цикл «если» и переходит прямо к последней строке, где он присоединяется к сеансу. В противном случае он создает сеанс и отправляет ему несколько ключей (пока просто запускает случайный скрипт). Затем он выходит из блока «if» и присоединяется.

Это очень тривиальный образец. Вы можете создать несколько окон, панелей и т.п. перед тем, как прикрепить.

Это будет не то же самое, о чем вы просили. Если вы вносите какие-либо изменения в сеанс, например, вы переименовываете окно и создаете в нем новую панель, если вы перезагрузите эти изменения, конечно, не будут сохранены.

Есть некоторые инструменты, которые облегчают процесс создания сценариев, хотя я предпочитаю делать что-то вручную (я думаю, это более универсально). Это инструменты Tmuxinator и Teamocil .

Моим основным источником информации была книга Tmux "The Pragmatic Bookshelf".


1
Похоже, это ничего не сделает, если я хочу восстановить сеанс с 5 открытыми файлами. Нет способа сделать это?
Чови

4
Tmux ничего не знает о состоянии процессов, которые вы могли выполнять. Вы можете написать сценарий с открытыми теми же файлами, используя команду 'send-keys' или 'split-window', например, 'vim file1 file2 file3', или загляните в систему управления сеансами вашего редактора (vim -S и т.п.)
bloy

Какова цель tmux send-keys ...линии?
Доминикас Мостаускис

2
@DominykasMostauskis эта команда отправляет нажатия клавиш в указанный сеанс. Это похоже на вход в сессию и ввод этих клавиш с клавиатуры. В этом случае вы отправляете «~ / bin / script», а затем «Enter».
Дакатин

1
сочетание some command; if [ $? != 0 ]; then .....более легко писать (и читать) , как: if ! some command; then ......
Фонини

117

Я написал простой скрипт bash, который сохраняет открытые сессии tmux, окна и текущие рабочие каталоги в каждой.

Называйте это так вручную или периодически из cron (потому что вы можете забыть):

tmux-session save

Это напишет ~/.tmux-session. Восстановите их после перезагрузки так:

tmux-session restore

Я нахожу это намного лучше, чем несколько сотен строк Perl-скрипта.


Это только если у вас есть один сеанс tmux?
Семерка

86

Я написал плагин tmux, который позволит вам сохранить полную среду tmux и восстановить ее позже. Он стремится быть очень подробным, чтобы у вас было ощущение, что вы никогда не бросаете tmux.

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

Обновление: теперь есть плагин tmux- Continum, который выполняет автоматическое сохранение в фоновом режиме среды tmux. При желании он также * автоматически * восстанавливает tmux env после перезагрузки компьютера.


Так же, как я отправил свой «ответ» с той же ссылкой, я посмотрел вверх - «do'h!» Нашел это, пытаясь вспомнить, как назывался твой плагин.
phatskat

Этот плагин неплох, но он не восстановил все мои программы. Будет читать больше ваших документов и, возможно, представить вопрос на GitHub.
Арне

@Arne В зависимости от программы, это может потребовать контрольной точки программы. Вместо этого я бы порекомендовал сконфигурировать ваши программы для восстановления - постоянные файлы .vimrc и позиции курсора для vim и т. Д. - и сохранить команду tmux pane_current_command для таких программ, как man, которые можно открыть заново. На мой взгляд, контрольно-пропускные пункты очень сложны, но в любом случае их стоит рассмотреть.
Джон П

@ bruno-sutic Какая разница между вашим плагином (tmux-resurrect) и tmux-coninuum?
одинокий

В настоящее время мне нужно было пропатчить континуум, как это, чтобы он работал github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol

10

tmuxinator - это инструмент, написанный на Ruby, который можно легко использовать для создания и управления сессиями tmux. Его можно использовать для создания проекта, который позже можно создать как сеанс tmux.


5

Рассмотрим это частичное решение, найденное здесь

Автор создает функцию, которая сохраняет историю сеанса tmux, чтобы сохранить состояние сеанса tmux после перезагрузки сервера.


17
Не могли бы вы опубликовать, что они говорят? Ссылки могут гнить.
13

1
@cpast: это правда, но комментарии тоже могут гнить. Лучше всего дать обоим :)
danielpops

6
@greg Ваша ссылка возвращает 404
rofrol

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.