Есть ли способ сохранить сеанс tmux? Другими словами, если я перезагружу компьютер, я всегда буду терять сессии?
5 ответов
Да, если вы перезагрузите компьютер, вы потеряете сессии. Сессии не могут быть сохранены. Но они могут быть написаны по сценарию. На самом деле большинство из них - это сценарий некоторых сессий, чтобы вы могли их заново создать. Например, вот тривиальный сценарий оболочки для создания сеанса:
#!/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".
Я написал простой скрипт bash, который сохраняет открытые сессии tmux, окна и текущие рабочие каталоги в каждой.
Называйте это так вручную или периодически из cron (потому что вы можете забыть):
tmux-session save
Он будет писать в ~/.tmux-session
. Восстановите их после перезагрузки так:
tmux-session restore
Я нахожу это намного лучше, чем Perl-скрипт длиной в несколько сотен строк.
Я написал плагин tmux, который позволит вам сохранить полную среду tmux и восстановить ее позже. Он стремится быть очень подробным, чтобы у вас было ощущение, что вы никогда не бросаете tmux.
https://github.com/tmux-plugins/tmux-resurrect
Обновление: теперь есть плагин tmux-континуума, который выполняет автоматическое фоновое сохранение среды tmux. При желании он также * автоматически * восстанавливает tmux env после перезагрузки компьютера.
tmuxinator - это инструмент, написанный на Ruby, который можно легко использовать для создания и управления сессиями tmux. Его можно использовать для создания проекта, который позже можно создать как сеанс tmux.
Рассмотрим это частичное решение, найденное здесь
Автор создает функцию, которая сохраняет историю сеанса tmux, чтобы сохранить состояние сеанса tmux после перезагрузки сервера.