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

通过nohup在70台服务器持续运行bash脚本遇阻求助

问题原因分析及修复方案

卡住的核心原因

  • SSH默认会将本地标准输入绑定到远程会话,即便远程命令用&后台运行,SSH仍会等待远程进程的输入操作,导致脚本卡在第一个IP处无法继续执行。
  • mkdir monitoring-api如果目标目录已存在,会抛出错误,虽然后续命令仍会执行,但可能干扰$?的状态判断。

nohup进程被终止的原因

  • 未重定向nohup的标准输出和错误流,这些流仍会关联到SSH会话,当你用ctrl+c终止SSH连接时,远程进程会收到SIGHUP信号被终止。
  • 即便用了nohup,若进程未完全脱离终端会话,SSH断开时仍可能被系统回收。

修复后的脚本

for ip in $(cat ip_address_list.txt)
do
    echo "Executing for $ip"
    # 关键修改:-n 参数让SSH不读取本地stdin,避免卡住;重定向nohup输出;mkdir -p避免重复创建报错
    ssh -n -i ~/sysadmin.pem -o StrictHostKeyChecking=no sysadmin@$ip "
        mkdir -p ~/monitoring-api
        cd ~/monitoring-api
        /usr/bin/gsutil cp gs://sysadmin/abc.sh .
        chmod +x abc.sh
        nohup ./abc.sh > nohup.out 2>&1 &
    "
    if [ $? -eq 0 ]
    then
        echo "Execution successful for $ip"
    else
        echo "Execution failed for $ip"
    fi
done

关键修改说明

  • -n:SSH的-n参数会将标准输入重定向到/dev/null,避免SSH等待本地输入,解决脚本卡住的问题。
  • mkdir -p:加上-p参数,即使目录已存在也不会报错,避免不必要的错误输出干扰脚本流程。
  • nohup ./abc.sh > nohup.out 2>&1 &:将标准输出和错误输出都重定向到nohup.out,彻底脱离SSH的输出通道,确保进程在SSH断开后能持续运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:42:08