使用qdel一次删除所有作业,而不是逐个删除。

71

这是一个相当简单的问题,但我一直未能找到答案。

我有很多在集群中运行的作业(>20),我想删除它们并重新开始。

根据这个网站,我应该只需要执行以下操作:

qdel -u netid

为了摆脱它们,但在我的情况下,返回如下结果:
qdel: invalid option -- 'u'
usage: qdel [{ -a | -c | -p | -t | -W delay | -m message}] [<JOBID>[<JOBID>]|'all'|'ALL']...
   -a -c, -m, -p, -t, and -W are mutually exclusive

很明显这表明命令无法正常工作。

只是为了确认,我执行了以下操作:

qstat -u <username>

and I do get a list of all my jobs, but:

qdel -u <username>

也失败了。


这是NQS排队系统吗? - Sigi
@Sigismondo 对不起,我不确定那是什么意思。我对群集管理了解甚少(我并不懂),我只是在使用它。 - Gabriel
为什么 qdel -u <username> 失败? - Charlie Parker
9个回答

107

有没有办法跳过已完成的作业?这个解决方案确实可以工作,但会输出大量 qdel 错误信息,试图杀死已完成的作业。 - Jindra Helcl
嗯,我不是很清楚,抱歉。 - Gabriel
3
谢谢。关于UGE,选项是大写的:qselect -U <user_list> - teng_wenxuan
1
链接已恢复在线。 - dter
2
使用 $USER 代替 <用户名> - ABCD
显示剩余3条评论

60

在Gabriel的回答基础上进行补充:

qselect -u <username> | xargs qdel

qselect -u <username> -s <state> | xargs qdel

<state> 的取值为 R 仅表示正在运行的作业。

qselect将允许您根据其他条件选择作业,例如所需资源(-l)、目标队列(-q)等。

qdel -u <username>

只能与SGE一起使用


为什么 qdel -u <username> 失败? - Charlie Parker
第二个解决方案对我没用… - Maciek Woźniak

14
有时候一个简单的 grep/cut 也可以帮上忙: qstat | grep $USER | cut -d. -f1 | xargs qdel 这样我们还可以根据作业的特定关键字进行 grep 并删除它们。
希望对你有所帮助。

2
我经常使用它,因为它可以为其他grep搜索增加很多灵活性。 - eclark
为什么 qdel -u <username> 失败? - Charlie Parker
2
你可能需要根据你的 qstat 输出来调整分隔符和字段编号。例如,对于我来说,它以两个空格字符开头,所以我使用 qstat | grep $USER | cut -d' ' -f3 | xargs qdel - Lino Ferreira

8
尝试一下
$ qdel {id1..id2}

例如:

所以举个例子:

$ qdel {1148613..1148650}

4

针对UGE:

qstat -u | gawk '{print $1}' | xargs qdel


2
# Delete all jobs owned by the current user.
# 
# Command breakdown:
# ------------------
#
# qselect
# -u selects all jobs that belong to the current user
# -s EHQRTW selects all job states except for Complete
#
# xargs
# --no-run-if-empty Do not run qdel if the result set is empty
#                   to avoid triggering a usage error.
#
# qdel
# -a delete jobs asynchronously
#
# The backslashes are a trick to avoid matching any shell aliases.

\qselect -u $(whoami) -s EHQRTW | \xargs --no-run-if-empty \qdel -a

1
另一个可能的解决方案是执行qdel all。这将删除所有人的作业。当您没有其他人的作业访问权限时,它仅会删除您自己的作业。
这不是最美观的解决方案,但肯定是最简单的!

3
对我没有作用。"用户(<user>)的所有工作不存在。" - Scott Warchal
对我来说可以运行。即使系统报告“未经授权”,它也像 guhur 所述那样仅删除您的作业。 - Ghersic

-1
qstat | cut -d. -f1 | sed "s;   \(.*\) 0;qdel \1;" | bash

sed的威力。


-2

只需使用以下命令:

qdel all           

它将取消在集群上运行的所有作业。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接