有什么方法可以保存tmux会话吗?换句话说,如果我重新启动计算机,我是否总是会丢失会话?

评论

您可以选择休眠到磁盘

休眠是替代使计算机持续运行而不是重新引导的一种方法。

@chepner:有些日子需要***重新启动系统***

@karatedog是的,所以我们俩都同意休眠不是解决重启时丢失tmux会话的解决方案。

@chepner休眠是某些形式的可选重新引导的替代方法(例如,关闭然后再打开以节省电量),但不是必需的重新引导。但是,前者仍然是重新启动的替代方法,不是吗?

#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
 


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

这是一个非常简单的示例。附加之前,您可以创建多个窗口,窗格等。如果您对会话进行了任何更改,例如,您重命名了一个窗口并在其中创建了一个新窗格,那么如果重新启动,这些更改当然将不会保存。

有一些工具可以简化尽管我更喜欢手动操作(我认为它更具通用性),但仍可以执行脚本编写会话的过程。这些工具是Tmuxinator和Teamocil。

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

评论


如果我想恢复打开了5个文件的会话,这听起来没有任何作用。没办法吗?

–碎肉
13年1月25日,下午1:38

Tmux对您可能已经运行的进程状态一无所知。您可以通过使'send-keys'或'split-window'命令为'vim file1 file2 file3'来打开具有相同文件的脚本,或者查看编辑器的会话管理(vim -S等)

–bloy
13年2月2日于14:44

tmux send-keys ...行的目的是什么?

– Dominykas Mostauskis
2014年4月15日13:38

@DominykasMostauskis该命令将按键发送到指定的会话。就像进入会话,然后从键盘输入那些键一样。在这种情况下,您发送“〜/ bin / script”,然后按Enter。

– Dakatine
14年4月16日在15:47

我可以让脚本使用用户名进行ssh登录并通过吗? (我知道它的安全性不高,只是想知道它是否适用于我不关心安全性但仍然需要用户和通行证的系统)。

–Jas
16年8月11日在5:12

#2 楼

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

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

tmux-session save


它将写入~/.tmux-session。重新启动后,像这样恢复它们:

评论


但是,仅当您进行一次tmux会话时,这才是吗?

–罗伯特·约翰斯通(Robert Johnstone)
19年5月17日在9:36

这适用于多个tmux会话,但不会在每个窗口中保存窗格。

–SimplyKnownAsG
19/12/5在17:46

您的tmux-session脚本现在位于我的dotfiles项目中。谢谢! github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

–加百利·斯台普斯
20 Mar 22 '20 at 6:48

非常感谢脚本@mislav。我将脚本另存为.zsh并在终端中运行〜/ .tmux-session.zsh,没有错误。然后重新启动计算机,然后在终端中打开tmux,并运行〜/ .tmux-session.zsh restore,并得到一条宽度无效的消息(在主目录中创建了另一个窗口。但是保存的会话(每个窗口中有3个窗口和2个窗格) )没有重新加载。您对可能出问题的地方有想法吗?

–ecjb
20年8月10日在12:01

我只是将扩展名从〜/ .tmux-session.zsh更改为〜/ .tmux-session,并收到了一系列错误消息〜/ .tmux-session:line x:y:命令未找到(其中x在0到0之间。 27和y在0和2之间(对于2个窗口,一个带有2个窗格,另一个带有一个窗格)

–ecjb
20年8月10日在12:07

#3 楼

我编写了一个tmux插件,使您可以保存完整的tmux环境并在以后还原它。 /github.com/tmux-plugins/tmux-resurrect

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

评论


这个插件还不错,但是它没有还原我的所有程序。将阅读更多您的文档,并可能在github上提交问题。

– Arne
16年7月31日在12:05

@Arne根据程序,这可能需要程序检查点。相反,我建议您配置要还原的程序-永久的.vimrc文件和vim的光标位置等-并为可以重新打开的程序(如man)存储tmux pane_current_command。我认为检查点非常复杂,但是无论如何都值得研究。

– John P
17年4月3日,下午1:52

@ bruno-sutic您的插件(tmux-resurrect)和tmux-coninuum之间的区别是什么?

–lony
17年8月22日在7:38

目前,我需要像这样修补连续体以使其正常工作github.com/tmux-plugins/tmux-continuum/blob/master/docs/…

– rofrol
18/12/21在9:51

我在bash命令历史记录重载(使用set -g @ resurrect-save-shell-history'on'时)和在tmux中的终端之间切换时的历史记录持久性存在一些问题。请参阅此线程,尤其是其第五条注释,以查看我成功用来解决此问题的解决方法(或破解)

–MatejVargovčík
19-4-10在7:26



#4 楼

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

#5 楼

考虑在此找到的部分解决方案

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

评论


你能发表他们的意见吗?链接可能会腐烂。

–cpast
13年2月2日在22:30



@cpast:的确如此,但是注释也可能会腐烂。最好都给:)

– danielpops
16年4月21日在16:44

@greg您的链接返回404

– rofrol
18/12/21在9:50

这是该作者的相关github链接:github.com/edsantiago/tmux-session

– zeroimpl
20年6月6日at 2:06

#6 楼

我成功地使用https://github.com/jimeh/tmuxifier重新创建了会话。只需使用git,就可以不使用ruby进行安装。

样本很容易解释,例如:https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh