使用扭矩和Grid Engine检测错误,并防止执行相关任务

时间:2015-04-14 20:26:53

标签: hpc sungridengine torque grid-computing

我有一个shell脚本,它将多个任务排队,以便在HPC群集上执行。相同的作业提交脚本适用于具有一些次要条件逻辑的扭矩或网格引擎。这是一个管道,早期任务的输出被送到后面的任务进行进一步处理。我使用qsub来定义作业依赖关系,因此后续任务在开始执行之前等待早期任务完成。到目前为止一切都很好。

有时,任务失败。当发生故障时,我不希望任何依赖任务尝试处理失败任务的输出。但是,在发生故障之前,依赖任务已经排队等待执行。什么是防止不必要处理的好方法?

2 个答案:

答案 0 :(得分:1)

您可以使用afterok依赖关系参数。例如,qsub命令可能如下所示:

qsub -w depend=afterok:<jobid> submit.pbs

如果jobid退出时没有错误,Torque将仅启动下一个作业。请参阅Adaptive Computing页面上的文档。

答案 1 :(得分:0)

这是我最终实施的内容。使这项工作的关键是错误时返回错误代码100。当看到错误代码100时,Sun Grid Engine停止执行后续作业。当看到任何非零错误代码时,Torque会停止执行后续作业。

qsub启动一系列bash脚本。每个bash脚本都有以下代码:

handleTrappedErrors()
{
errorCode=$?
bashCommand="$BASH_COMMAND"
scriptName=$(basename $0)
lineNumber=${BASH_LINENO[0]}
# log an error message to a log file here -- not shown
exit 100
}


trap handleErrors ERR

扭矩(正如Derek所说):

qsub -W depend=afterok:<jobid> ...

Sun Grid Engine:

qsub -hold_jid <jobid> ...