我已经阅读过tmux-resurrect
,但我仍然不清楚是否可以执行以下操作:
- 开始
tmux
会话 ssh
到远程服务器- 在远程主机上启动长时间运行的代码
- 终止 tmux 服务器(例如本地机器重启)
- 恢复并重新连接 tmux 会话(例如使用
tmux-resurrect
) - 继续监控我在远程服务器上启动的代码
我需要nohup
在步骤 3 中使用它吗?或者可以tmux-resurrect
(或其他工具)处理它吗?
答案1
没有本地工具可以做到这一点,因为服务器“看到”的是:
- 如果您正常断开 SSH 连接,服务器将立即注意到这一点;
- 如果你突然消失(例如硬重置),连接将在服务器端保持打开状态,直到某种超时(比较
ClientAlive*
选项,TCP keepalive 概念 - 参见这个答案了解详细信息)。
tmux-resurrect
即使您打算在本地使用或其他工具,服务器也不知道,也不关心。除非您使用nohup
或更好的工具,否则它将终止您的长期运行代码……
如果可以,请在服务器上使用tmux
(或)screen
:
- 不要
tmux
在客户端进入会话。 ssh
到服务器。tmux
在服务器上启动会话。- 在那里启动长期运行的代码。
- 无论如何都要断开连接:无论是否礼貌地断开连接,无论是否脱离遥控器
tmux
。 ssh
再次。- 您的
tmux
会话仍然存在(除非在此期间服务器出现问题);重新连接tmux a
。
我tmux
每天都使用这种方法,我认为这是正确的方法。在我的笔记本电脑上,tmux
会话最多持续几个小时,我每晚都会关闭它;但我可以访问几台服务器,我的tmux
会话在这些服务器上运行了几个月。当我写这篇文章时,其中一台服务器上有一个watch df -h
进程在两个月前开始的会话中运行了整整一周tmux
。