Чи є спосіб зберегти сеанс tmux? Іншими словами, якщо я перезавантажую комп'ютер, я завжди втрачу сеанси?
*** System restart required ***
Чи є спосіб зберегти сеанс tmux? Іншими словами, якщо я перезавантажую комп'ютер, я завжди втрачу сеанси?
*** System restart required ***
Відповіді:
Так, якщо ви перезавантажите комп'ютер, ви втратите сеанси. Сеанси не можна зберегти. Але, вони можуть бути скриптовані. Найбільше насправді - це сценарій деяких сеансів, щоб ви могли їх створити заново. Наприклад, ось тривіальний скрипт оболонки для створення сеансу:
#!/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
Ось що це робить. По-перше, він перевіряє, чи є якийсь сеанс вже з цим ім'ям (у цьому випадку, саме оригінальне ім'я - "скрипт") з tmux has-session . Він перевіряє код повернення. Якщо вже триває сеанс з цим ім'ям, він пропускає цикл "якщо" і переходить до останнього рядка, де він приєднується до сеансу. В іншому випадку він створює сеанс і надсилає до нього кілька ключів (наразі просто запущений випадковий сценарій). Потім він виходить з блоку "якщо" і вкладається.
Це дуже тривіальна вибірка. Перед створенням можна створити кілька вікон, панелей тощо.
Це не те саме, про що ви просили. Якщо ви внесете якісь зміни в сеанс, наприклад, ви перейменовуєте вікно і створите в ньому нову панель, якщо ви перезавантажите ці зміни, звичайно, не будуть збережені.
Є деякі інструменти, які полегшують процес сценаріїв сеансів, хоча я вважаю за краще робити речі вручну (я вважаю, що це більш універсально). Такими інструментами є Tmuxinator і Teamocil .
Головним моїм джерелом інформації була книга «Прагматична книжкова полиця» Tmux.
tmux send-keys ...
рядка?
some command; if [ $? != 0 ]; then .....
легше писати (і читати) , як: if ! some command; then .....
.
Я написав простий скрипт 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 після перезавантаження сервера.
Я успішно використовую https://github.com/jimeh/tmuxifier для відтворення сеансів. Це можна встановити без рубіну, просто використовуючи git.
Зразки досить зрозумілі, наприклад: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh