236

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

5 ответов5

154

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

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

110

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

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

tmux-session save

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

tmux-session restore

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

79

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

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

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

10

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

5

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .