我有一个shell脚本,可以从中调用其他五个脚本。第一个脚本在群集中创建50个qsub作业。个人工作执行时间从几分钟到一小时不等。我需要知道所有50个工作何时完成,因为在完成所有工作后我需要运行第二个脚本。如何查找是否所有qsub作业都已完成?一种可能的解决方案是使用无限循环并使用带有作业ID的qstate命令检查作业状态。在这种情况下,我需要不断检查作业状态。这不是一个很好的解决方案。是否有可能在执行后,qsub作业将自行通知我。因此,我不需要经常监视工作状态。
答案 0 :(得分:0)
我从未听说过如何做到这一点,如果有人得到了一个好的回答,我会非常感兴趣。
同时,我建议您使用文件技巧。您的脚本最后会输出一个文件,或者您检查是否存在日志文件(假设它们仅在最后创建)。
while [ ! -e ~/logs/myscript.log-1 ]; do
sleep 30;
done
答案 1 :(得分:0)
qsub
能够使用-W depend=afterok:jobid
来处理作业依赖性。
e.g。
#!/bin/bash
# commands to run on the cluster
COMMANDS="script1.sh script2.sh script3.sh"
# intiliaze JOBID variable
JOBIDS=""
# queue all commands
for CMD in $COMMANDS; do
# queue command and store the job id
JOBIDS="$JOBIDS:`qsub $CMD`"
done
# queue post processing, depended on the submitted jobs
qsub -W depend=afterok:$JOBIDS postprocessing.sh
exit 0