You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地重启/睡眠后,远程机器tmux会话内脚本停止运行求助

问题根源:你搞反了tmux的运行位置!

哈哈,我一眼就看出问题所在了——你是在本地Mac的tmux会话里打开SSH连接到远程机器,然后在远程跑脚本。这种情况下,本地tmux只是帮你保存了本地的SSH窗口状态,但远程的脚本进程其实是挂在SSH连接上的。一旦本地睡眠、重启,SSH连接会直接断开,远程服务器会把依附在这个连接上的所有进程都杀掉,脚本自然就停了。

正确的操作姿势:把tmux跑在远程机器上!

这才是tmux用来保持远程进程存活的正确打开方式,步骤如下:

  • 直接在本地终端SSH登录远程机器:

    ssh user@remote-server-ip
    

    (不用先开本地tmux,当然开了也没关系,但核心是远程端要开tmux)

  • 在远程机器的终端里启动tmux会话:

    tmux new -s my-script-session  # 给会话起个好记的名字,方便后续连接
    
  • 在远程的tmux会话里启动你的脚本:

    ./your-long-running-script.sh
    
  • 分离远程的tmux会话:按Ctrl+b d,此时你会回到本地的SSH终端,然后可以直接关闭SSH连接,甚至本地睡眠、重启都无所谓——脚本会一直在远程的tmux会话里跑着。

  • 后续重新连接:先SSH登录远程机器,然后执行:

    tmux attach -t my-script-session
    

    就能回到之前的会话,看到脚本的运行状态了。

额外优化:防止SSH连接被远程服务器主动断开

有些服务器会因为长时间无交互断开SSH连接,你可以在本地Mac的~/.ssh/config里加个配置,让SSH定期发心跳包:

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3

这样每60秒发一次心跳,连续3次没回应才断开,能大大降低连接被主动断开的概率。

补个小提醒:如果已经在本地tmux里跑了SSH,怎么补救?

要是你已经在本地tmux里开了SSH,不想重新来,可以在当前的远程SSH会话里直接启动tmux:

  • 在远程终端里启动tmux会话:tmux new -s rescue-session
  • 把你的脚本在这个远程tmux会话里重新启动就行(如果脚本已经在跑,想要把进程移过来需要装reptyr工具,步骤稍复杂,不如直接重启脚本省心)

内容的提问来源于stack exchange,提问作者MoreScratch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:07:35