连续运行nohup脚本批处理
问题描述:
我有一个“父”python脚本集合script_1.py
,...,script_n.py
,其中每一个都使用os.system和nohup异步启动一堆不同的“子”python脚本。每个父脚本也节省了孩子的的PID到/tmp/task_1/kill.sh
,...,/tmp/task_n/kill.sh
连续运行nohup脚本批处理
我要连续运行所有ň父脚本,确保所有父的异步孩子的i-1已完成在运行父母之前执行i。
我尝试(两个父母)是运行bash脚本:
#!/bin/bash
python script_1.py &
wait
python script_2.py &
然而,这种启动的script_1.py
和script_2.py
所有儿童根据ps -ef | grep python
。
FYI:每个kill.sh文件的内容是形式
#!/bin/sh
kill 36713
kill 36715
etc..
答
你想等待第一等待结束后所有孩子的仍在运行的。
当主脚本完成时,我假设文件/tmp/task_1/kill.sh已完成。你可以找到PID与 SED -n“/杀/ S /杀// P” /tmp/task_1/kill.sh 你要等待这些:
#!/bin/bash
python script_1.py &
wait
wait $(sed -n '/kill/ s/kill //p' /tmp/task_1/kill.sh)
python script_2.py &
还可以测试在循环:
scriptnr=1
while test -x "script_${scriptnr}.py"; do
python script_${scriptnr}.py &
wait
wait $(sed -n '/kill/ s/kill //p' /tmp/task_${scriptnr}/kill.sh)
((scriptnr++))
done
如果你想连续运行python脚本*,那么不要背景它们!? –
@JeffSchaller:即使我将script_1.py和script_2.py作为前台进程运行,也无法保证在调用“python script_2.py”时script_1的子项已经完成执行。我怎样才能确保我想要的行为? – user11881
@JeffSchaller我怀疑我需要使用script_1生成的PID列表来决定何时启动script_2,但我不确定如何执行此操作。我是否在说这个? – user11881