![重启后恢复 tmux 会话](https://linux22.com/image/1319267/%E9%87%8D%E5%90%AF%E5%90%8E%E6%81%A2%E5%A4%8D%20tmux%20%E4%BC%9A%E8%AF%9D.png)
有什么方法可以保存 tmux 会话吗?换句话说,如果我重新启动计算机,我是否会丢失会话?
答案1
是的,如果你重启电脑,会话就会丢失。会话无法保存。但是,它们可以编写脚本。大多数人实际上做的是脚本一些会话,以便您可以重新创建它们。例如,下面是创建会话的简单 shell 脚本:
#!/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 有会话。它会检查返回代码。如果已经有一个同名的正在进行的会话,它会跳过“if”循环并直接转到最后一行,在那里它会附加到该会话。否则,它会创建一个会话并向其发送一些密钥(目前只是运行一个随机脚本)。然后它退出“if”块并附加。
这是一个非常简单示例。您可以在附加之前创建多个窗口、窗格等。
这会不是但与你要求的完全一样。如果你对会话做了任何更改,例如重命名窗口并在其中创建新窗格,那么重新启动后这些更改当然不会被保存。
有一些工具可以简化脚本编写过程,尽管我更喜欢手动操作(我认为它更通用)。这些工具包括多路复用器和西地那非。
我的主要信息来源是“实用书架”Tmux 书。
答案2
我写了一个简单的 bash 脚本它会在每个会话、窗口和当前工作目录中持久保存打开的 tmux 会话、窗口和当前工作目录。
像这样手动或定期从 cron 调用它(因为您可能会忘记):
tmux-session save
它将写入~/.tmux-session
。重启后恢复它们,如下所示:
tmux-session restore
我发现这比几百行长的 Perl 脚本好多了。
答案3
我写了一个 tmux 插件,可以让你保存完整的 tmux 环境并在以后恢复。它力求做到非常详细,让你有一种从未退出 tmux 的感觉。
https://github.com/tmux-plugins/tmux-resurrect
更新:现在有一个tmux-连续体插件可自动在后台保存 tmux 环境。此外,它还可在计算机重启后自动恢复 tmux 环境。
答案4
考虑发现的这个部分解决方案这里
作者创建了一个保存 tmux 会话历史记录的函数,以便在服务器重启后保留 tmux 会话的状态。