我需要提交大量的工作,并且我为此目的编写了一个简单的bash脚本。 我的bash脚本如下所示:
for i in {1..2}
do
mkdir "Pris_$i"
cp script.sh precip.in Zope* ./"Pris_$i"
cd ./"Pris_$i"
sed -i "s/0.505\*1/0.505\*$i/g" ./precip.in
qsub script.sh
cd ..
done
我现在想知道一种控制作业提交的方法:保持直到提交的作业完成,然后提交下一份作业。我可以使用qsub -W depend=afterok:jobID <jobname>
添加依赖项,但我需要提取刚提交的作业的作业ID。我的qsub的输出如下:<jobID>.serveraddress.edu
。现在,我怎么能提取这个jobID?
答案 0 :(得分:0)
您可以使用类似的内容来延迟第二个作业的开始,直到第一个作业完成:
job_id=$(qsub first_job | awk -F. '{print $1}')
qsub -W depend=afterok:"$job_id" second_job
此方法仅使用awk将qsub
命令的输出拆分为由.
分隔的字段。第一个字段保存到变量job_id
。
要在循环中执行此操作,您可以将循环更改为以下内容:
for i in {1..2}; do
mkdir "Pris_$i"
cp script.sh precip.in Zope* ./"Pris_$i"
cd ./"Pris_$i"
sed -i "s/0.505\*1/0.505\*$i/g" ./precip.in
if [[ -n "$job_id" ]]; then
job_id=$(qsub -W depend=afterok:"$job_id" script.sh | awk -F. '{print $1}')
else
job_id=$(qsub script.sh | awk -F. '{print $1}')
fi
cd ..
done
if
检查负责第一次迭代,其中没有定义先前的$job_id
。对于一个简单的分隔符,例如.
,也可以使用cut -d. -f1
来获取ID,而不是使用awk命令。