检测扭矩和网格引擎的错误并防止执行相关任务

Detect errors with torque and grid engine and prevent execution of dependent tasks

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

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

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

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

只有在作业 ID 无误退出时,Torque 才会开始下一个作业。请参阅 Adaptive Computing 页面上的文档。

这是我最终实现的。完成这项工作的关键是在出错时返回错误代码 100。 Sun Grid Engine 在看到错误代码 100 时停止执行后续作业。Torque 在看到任何非零错误代码时停止执行后续作业。

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

handleTrappedErrors()
{
errorCode=$?
bashCommand="$BASH_COMMAND"
scriptName=$(basename [=10=])
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 网格引擎:

qsub -hold_jid <jobid> ...