如何使用作业名称检查作业是否正在集群上运行(CentOS)

如何使用作业名称检查作业是否正在集群上运行(CentOS)

我正在运行 bash 脚本来提交多个作业。仅当作业尚未运行时,才会提交作业。我想在 bash 脚本中使用 if 语句来简单地检查“job123”是否已经在运行或在队列中。

我尝试了 qstat 和 qstatus 的不同选项,但我似乎无法按作业名称进行检查。如何检索这些信息?而且这些输出只是字符串,我也没有使用 grep 的运气,但我认为必须有一个特定的命令。

答案1

Sun/Oracle Grid Engine 的qstat实用程序仅允许您按用户和作业 ID 过滤作业。如果您需要按职位名称进行过滤,则必须执行grep以下操作:

qstat -u $USER | grep -w jobname

用于if- 语句中:

if qstat -u $USER | grep -q -w "$jobname"; then
  # job is in the queue
else
  # job is not in the queue
fi

在网上简单搜索了一下,我还发现一些的版本qstat 出现能够使用-j开关按作业名称进行过滤:

qstat -u $USER -j "$jobname"

我无法验证这是否有效。其他版本这个实用程序显然不能做到这一点(甚至不支持-u)。

答案2

我已经能够解决

qstat -r | grep -cw "作业名"

它给出了 0 或 1,然后我可以在 if 语句中使用它们。在我看来,这更像是一种黑客行为。 -r 很重要,因为它显示作业的全名。

相关内容