【发布时间】:2019-08-09 06:08:37
【问题描述】:
我收到了一个 c shell 脚本,它启动了 800 个单独的 qsubs 以获取示例。我需要在超过 500 个样本上运行这个脚本(在samples.txt 中列出)。为了自动化这个过程,我考虑过使用以下 bash shell 脚本运行脚本(名为 SrchDriver):
#!/bin/sh
for item in $(cat samples.txt)
do
(cd dir_"$item"/MAPGAPS && SrchDriver "$item"_Out 3)
done
此脚本会为所有样本一个接一个地启动SrchDriver 脚本,这会导致服务器上的作业一次过多。我想一次只运行一个样本,等待所有qsubs 完成特定样本。
检查样本的运行/等待作业并保持启动 Srchdriver 脚本以获取其他样本直到当前样本的所有作业完成的最佳方法是什么?
我想先等待 30 秒,然后检查 qsubs 的状态(作业名称为 mapgaps)。接下来,我想使用 while 循环每 30 秒检查一次状态。一旦状态不再为 0,则继续下一个样本。这是正确的吗?
sleep 30
qstat | grep mapgaps &> /dev/null
while [ $? -eq 0 ];
do
sleep 30
qstat | grep mapgaps &> /dev/null
done;
如果正确,我将如何将它与我的 for 循环结合起来?下面的代码是否正确?
#!/bin/sh
for item in $(cat samples.txt)
do
(cd dir_"$item"/MAPGAPS && SrchDriver "$item"_Out 3)
sleep 30
qstat | grep mapgaps &> /dev/null
status=$?
while [ $status = 0 ]
do
sleep 30
qstat | grep mapgaps &> /dev/null
status=$?
done
done
提前感谢您的帮助。如果需要更多信息,请告诉我。
【问题讨论】: