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

如何在远程多台机器同时运行非终止型Python脚本?

解决远程启动多个非终止Python脚本的阻塞问题

最直接的方式是将每个脚本放到后台运行,同时避免SSH会话关闭后进程被终止,以下是几种可行方案:

方案1:后台运行 + nohup(最可靠)

修改你的init_all_processes.sh脚本,给每个Python命令添加nohup和后台运行符号&,同时丢弃日志输出:

#!/bin/bash
# 将每个进程放到后台并忽略HUP信号,丢弃所有输出
sudo nohup python3 /home/proj1/webServer.py >/dev/null 2>&1 &
sudo nohup python3 /home/proj2/server/main.py >/dev/null 2>&1 &
sudo nohup python3 /home/proj1/test/test_server.py >/dev/null 2>&1 &
sudo nohup python3 /home/proj2/process_receiving_images.py >/dev/null 2>&1 &
  • &:让当前进程在后台执行,不阻塞后续命令
  • nohup:使进程忽略SSH会话关闭时发送的HUP信号,保证进程持续运行
  • >/dev/null 2>&1:将标准输出和错误输出全部丢弃,满足你无需日志的需求

执行命令保持不变:

ssh root@MachineB 'bash -s' < init_all_processes.sh

方案2:后台运行 + SSH -f 参数(简化版)

如果仅用于临时测试,不需要长期稳定运行,可以给SSH命令添加-f参数让其在后台执行,脚本内只需给每个命令加&:

修改后的脚本:

#!/bin/bash
sudo python3 /home/proj1/webServer.py &
sudo python3 /home/proj2/server/main.py &
sudo python3 /home/proj1/test/test_server.py &
sudo python3 /home/proj2/process_receiving_images.py &

执行命令:

ssh -f root@MachineB 'bash -s' < init_all_processes.sh

注意:这种方式下,若SSH会话异常终止,后台进程可能会被系统回收,适合短期场景。

方案3:使用setsid脱离会话

setsid可以让进程完全脱离当前终端会话,效果类似nohup:

#!/bin/bash
sudo setsid python3 /home/proj1/webServer.py >/dev/null 2>&1 &
sudo setsid python3 /home/proj2/server/main.py >/dev/null 2>&1 &
# 其余命令同理

传递参数的实现

如果需要向远程脚本传递参数,可以在SSH命令中通过--传递,脚本内用位置变量接收:

例如要给webServer.py传递--port 8080参数:
执行命令:

ssh root@MachineB 'bash -s' -- --port 8080 < init_all_processes.sh

修改脚本:

#!/bin/bash
sudo nohup python3 /home/proj1/webServer.py "$@" >/dev/null 2>&1 &
# "$@"会接收所有传递的参数,按需分配给其他脚本
sudo nohup python3 /home/proj2/server/main.py >/dev/null 2>&1 &

内容的提问来源于stack exchange,提问作者M.K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:54:32