重启后恢复 tmux 会话

Ken*_*llB 335 tmux

有没有办法保存 tmux 会话?换句话说,如果我重新启动计算机,我会不会总是丢失会话?

Dak*_*ine 204

是的,如果您重新启动计算机,您将丢失会话。会话无法保存。但是,它们可以编写脚本。事实上,大多数人所做的是编写一些会话的脚本,以便您可以重新创建它们。例如,这里有一个简单的 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
Run Code Online (Sandbox Code Playgroud)

这就是它的作用。首先,它使用tmux has-session检查是否已经有任何具有该名称的会话(在这种情况下,原始名称是“script”)。它检查返回码。如果已经有一个使用该名称的正在进行的会话,它会跳过“if”循环并直接转到最后一行,在那里它附加到会话。否则,它会创建一个会话并向其发送一些密钥(现在只是运行一个随机脚本)。然后它退出“if”块并附加。

这是一个非常简单的示例。您可以在附加之前创建多个窗口、窗格等。

这会不会是你问同样的事情,但。如果您对会话进行了任何更改,例如您重命名一个窗口并在其中创建一个新窗格,如果您重新启动,这些更改当然不会被保存。

有一些工具可以简化脚本会话的过程,尽管我更喜欢手动操作(我认为它更通用)。这些工具是TmuxinatorTeamocil

我的主要信息来源是“实用书架”Tmux 书。

  • Tmux 对您可能运行的进程状态一无所知。您可以通过将 'send-keys' 或 'split-window' 命令设为 'vim file1 file2 file3' 或查看编辑器的会话管理(vim -S 等)来编写打开 *相同* 文件的脚本 (5认同)
  • 如果我想在打开 5 个文件的情况下恢复会话,这听起来不会做任何事情。没有办法这样做吗? (2认同)
  • @DominykasMostauskis 命令 _sends_ 按键到指定的会话。这就像进入会话,并从键盘输入那些键。在这种情况下,您发送“~/bin/script”,然后按 Enter。 (2认同)

mis*_*lav 142

我编写了一个简单的 bash 脚本,在每个脚本中都保持打开的 tmux 会话、窗口和当前工作目录。

从 cron 手动或定期调用它(因为您可能会忘记):

tmux-session save
Run Code Online (Sandbox Code Playgroud)

它将写入~/.tmux-session. 重新启动后恢复它们,如下所示:

tmux-session restore
Run Code Online (Sandbox Code Playgroud)

我发现这比几百行长的 Perl 脚本要好得多。

  • 这适用于多个 tmux 会话,但它不会在每个窗口中保存窗格。 (2认同)

小智 110

我写了一个 tmux 插件,可以让你保存完整的 tmux 环境并在以后恢复它。它力求做到非常详细,让您有一种永远不会退出 tmux 的感觉。

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

更新:现在有一个tmux-continuum插件可以执行 tmux 环境的自动后台保存。可选地,它还*自动*在计算机重新启动后恢复 tmux 环境。

  • @bruno-sutic 你的插件(tmux-resurrect)和 tmux-coninuum 之间有什么区别? (4认同)

小智 11

tmuxinator是一个用 Ruby 编写的工具,可用于轻松创建和管理 tmux 会话。它可用于创建一个项目,稍后可以将其实例化为 tmux 会话。


小智 5

考虑这里找到的这个部分解决方案

作者创建了一个函数来保存 tmux 会话的历史记录,以便在服务器重启后保持 tmux 会话的状态。

  • 你能把他们说的话贴出来吗?链接可能会腐烂。 (21认同)
  • @greg 你的链接返回 404 (7认同)
  • 这是该作者的相关 github 链接:https://github.com/edsantiago/tmux-session (2认同)