Arrays 当数组中的子对象数取决于前一个作业的结果时,如何在多个保留作业的管道中运行数组作业

Arrays 当数组中的子对象数取决于前一个作业的结果时,如何在多个保留作业的管道中运行数组作业,arrays,bash,sungridengine,Arrays,Bash,Sungridengine,我正在尝试编写一个bash脚本,将几个作业发送到集群(SGE调度程序),每个作业都等待前一个作业结束,例如: HOLD_ID=$(qsub JOB1.sh | cut -c 10-16) HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB2.sh | cut -c 10-16) HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB3.sh | cut -c 10-16) qsub -hold_jid $HOLD_ID -t 1-$NB_OF_SUB

我正在尝试编写一个bash脚本,将几个作业发送到集群(SGE调度程序),每个作业都等待前一个作业结束,例如:

HOLD_ID=$(qsub JOB1.sh | cut -c 10-16)
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB2.sh | cut -c 10-16)
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB3.sh | cut -c 10-16)
qsub -hold_jid $HOLD_ID -t 1-$NB_OF_SUBJOBS JOB4.sh
这非常有效,但是,现在我想在此管道中添加一个保留的数组作业,例如:

HOLD_ID=$(qsub JOB1.sh | cut -c 10-16)
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB2.sh | cut -c 10-16)
HOLD_ID=$(qsub -hold_jid $HOLD_ID JOB3.sh | cut -c 10-16)
qsub -hold_jid $HOLD_ID -t 1-$NB_OF_SUBJOBS JOB4.sh
但是在这里,子作业的数量(
$NB\u of_subbobs
)取决于JOB2.sh的结果

我希望这是一个快速,主脚本,只是发送所有的工作。我不想有一段时间+睡眠或类似的东西,这是我的第一次尝试。取决于我需要的数量(JOB2.sh)的工作时间相对较长。由于在提交时对最后一行进行了评估,因此包含由上一个JOB2.sh创建的子作业数的任何变量或文件都将不起作用。有什么想法吗

非常感谢,


David

因此,如果我理解的话,作业4的提交基于从作业2的完成中获取信息。如果是这种情况,很明显,您将需要在作业2完成后提交作业4,这与提交作业4和在作业2完成时暂停执行是分开的

为什么不在作业2上使用
-sync-y
选项,使作业4的提交仅在作业2完成后发生:

qsub -hold_jid $HOLD_ID JOB2.sh -sync y
确保将作业2的输出
n_subbobs
变量输出到类似文件的位置(
n_subbobs.txt
下面的示例),或者您可以像对作业id所做的那样将输出解析为变量。然后在提交作业4时阅读此信息:

qsub -t 1-$(cat n_subjobs.txt) JOB4.sh