正确使用具有未知进程号的Bash wait命令

时间:2017-12-18 03:59:24

标签: bash shell sh

我正在编写一个bash脚本,它基本上会触发一个大约需要10个小时才能完成的python脚本,然后是一个R脚本,它会检查python脚本的输出以查找我需要关注的任何内容。这就是我所拥有的:

ProdRun="python scripts/run_prod.py"

echo "Commencing Production Run"

$ProdRun #Runs python script

wait

DupCompare="R CMD BATCH --no-save ../dupCompareTD.R" #Runs R script
$DupCompare

现在我的问题是,python脚本通常可以在我们的linux服务器上生成一大堆不同的进程,具体取决于它的输入,有很多不同的PID,而且我们有大量的工作人员使用相同的服务器触发脚本。据我所知,“wait”命令必须等待所有进程完成或者特定PID完成,但是当我无法分辨将分配什么或多少PID /进程时,我究竟是怎么做的用吗?

编辑:感谢所有有帮助的人,这就是导致我进入谷歌搜索这个问题的困境。我将ProdRun python脚本分解为它自己调用的单个脚本,但仍然有问题,我认为其中一个脚本也调用了另一个带有“&”的小脚本。在它的末尾忽略了在python脚本本身内等待它的任何命令。只需删除它并插入一行“os.system()”就可以顺序运行所有代码。

2 个答案:

答案 0 :(得分:1)

听起来您正在尝试实现一个作业调度程序,可能在不同任务之间存在一些复杂的依赖关系。我建议改用作业调度程序。它允许您指定运行这些作业,同时还受益于监视,处理特殊情况,错误等功能......

示例包括:开源rundeck https://github.com/rundeck/rundeck或商业广告http://www.bmcsoftware.uk/it-solutions/control-m.html

答案 1 :(得分:0)

Make your Python program wait on the children it spawns. That's the proper way to fix this scenario. Then you don't have to wait for Python after it finishes (sic).

(Also, don't put your commands in variables.)