tmux 重启后远程代码执行

Mic*_*lSB 4 ssh nohup tmux

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

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

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

Kam*_*ski 5

由于服务器“看到”的内容,没有本地工具可以做到这一点:

  • 如果你优雅地断开 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两个月前开始的一个会话中运行了一个星期。