我正在运行 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 很重要,因为它显示作业的全名。