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

如何使用nohup在服务器后台运行N个进程?遇ssh断开进程终止等问题

问题解决办法

1. 解决每次启动新进程时旧进程被关闭的问题

  • 检查你的batch脚本,确认里面是否包含自动终止同类型进程的逻辑(比如pkill batch、killall,或者读取PID文件后杀死旧进程的代码)。如果有这类逻辑,要么移除,要么修改为根据不同配置生成独立的PID文件(比如每个实例对应pid_${配置名}.txt),避免误杀其他实例。
  • 给每个实例分配独立的日志文件,不要共用同一个logfile.txt。比如根据启动参数命名:
    nohup bash batch 参数1 > logfile_param1.txt 2>&1 <&- &
    nohup bash batch 参数2 > logfile_param2.txt 2>&1 <&- &
    
    共用日志文件可能导致文件锁或脚本内的日志处理逻辑冲突,间接引发进程终止。

2. 解决关闭SSH会话后进程被终止的问题

  • 不要用source执行脚本,source会在当前shell环境中运行脚本,难以完全脱离终端绑定。坚持用bash batch的方式启动。
  • 可以给命令加上setsid,创建独立的会话,彻底脱离原SSH终端的控制:
    nohup setsid bash batch 参数 > logfile_xxx.txt 2>&1 <&- &
    
  • 确认batch脚本内的所有子进程也没有依赖终端的操作。如果脚本里启动了其他后台进程,也要确保这些进程不会因为终端关闭而退出(比如在脚本内给子进程也加上nohup或disown)。
  • 启动进程后,用ps aux | grep batch确认进程是否正常运行,同时检查日志文件是否有报错信息,排查脚本是否因自身逻辑退出(比如未处理的错误、循环提前结束)。

额外建议

  • 每个实例启动后,将进程PID保存到独立文件,方便后续管理(查看、终止):
    nohup bash batch 参数 > logfile_xxx.txt 2>&1 <&- &
    echo $! > pid_xxx.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:23:22