tmux 重启后远程代码执行

tmux 重启后远程代码执行

我已经阅读过tmux-resurrect,但我仍然不清楚是否可以执行以下操作:

  1. 开始tmux会话
  2. ssh到远程服务器
  3. 在远程主机上启动长时间运行的代码
  4. 终止 tmux 服务器(例如本地机器重启)
  5. 恢复并重新连接 tmux 会话(例如使用tmux-resurrect
  6. 继续监控我在远程服务器上启动的代码

我需要nohup在步骤 3 中使用它吗?或者可以tmux-resurrect(或其他工具)处理它吗?

答案1

没有本地工具可以做到这一点,因为服务器“看到”的是:

  • 如果您正常断开 SSH 连接,服务器将立即注意到这一点;
  • 如果你突然消失(例如硬重置),连接将在服务器端保持打开状态,直到某种超时(比较ClientAlive*选项,TCP keepalive 概念 - 参见这个答案了解详细信息)。

tmux-resurrect即使您打算在本地使用或其他工具,服务器也不知道,也不关心。除非您使用nohup或更好的工具,否则它将终止您的长期运行代码……

如果可以,请在服务器上使用tmux(或)screen

  1. 不要tmux在客户端进入会话。
  2. ssh到服务器。
  3. tmux在服务器上启动会话。
  4. 在那里启动长期运行的代码。
  5. 无论如何都要断开连接:无论是否礼貌地断开连接,无论是否脱离遥控器tmux
  6. ssh再次。
  7. 您的tmux会话仍然存在(除非在此期间服务器出现问题);重新连接tmux a

tmux每天都使用这种方法,我认为这是正确的方法。在我的笔记本电脑上,tmux会话最多持续几个小时,我每晚都会关闭它;但我可以访问几台服务器,我的tmux会话在这些服务器上运行了几个月。当我写这篇文章时,其中一台服务器上有一个watch df -h进程在两个月前开始的会话中运行了整整一周tmux

相关内容