使用 qdel 一次删除我所有的作业,而不是一次一个
Use qdel to delete all my jobs at once, not one at a time
这是一个相当简单的问题,但我一直没能找到答案。
我在集群中有大量作业 运行 (>20),我想将它们全部删除并重新开始。
根据 this site 我应该可以做到:
qdel -u netid
把它们都去掉,但在我的例子中 returns:
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>
我确实得到了我所有工作的列表,但是:
qdel -u <username>
也失败了。
找到埋在old supercluster.org thread中的答案:
qselect -u <username> | xargs qdel
工作完美。
另一种可能性是qdel all
。它会删除所有人的所有工作。当您无权访问其他人的工作时,它只会删除您的工作。
这不是最美的解决方案,但肯定是最短的!
基于加布里埃尔的回答:
qselect -u <username> | xargs qdel
qselect -u <username> -s <state> | xargs qdel
<state>
将 R
仅用于 运行 个职位。
qselect 将允许您根据其他条件 select 作业,例如请求的资源 (-l)、目标队列 (-q) ...
qdel -u <username>
仅适用于 SGE
# 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
只需使用以下命令:
qdel all
它将取消集群上的所有作业 运行。
有时简单的 grep/cut
也有帮助:
qstat | grep $USER | cut -d. -f1 | xargs qdel
这样我们还可以 grep
对职位的特定关键字进行删除。
HTH
qstat | cut -d. -f1 | sed "s; \(.*\) 0;qdel ;" | bash
sed 的强大功能。
尝试
$ qdel {id1..id2}
例如:
$ qdel {1148613..1148650}
一周:
qstat -u | gawk '{print $1}' | xargs qdel
这是一个相当简单的问题,但我一直没能找到答案。
我在集群中有大量作业 运行 (>20),我想将它们全部删除并重新开始。
根据 this site 我应该可以做到:
qdel -u netid
把它们都去掉,但在我的例子中 returns:
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>
我确实得到了我所有工作的列表,但是:
qdel -u <username>
也失败了。
找到埋在old supercluster.org thread中的答案:
qselect -u <username> | xargs qdel
工作完美。
另一种可能性是qdel all
。它会删除所有人的所有工作。当您无权访问其他人的工作时,它只会删除您的工作。
这不是最美的解决方案,但肯定是最短的!
基于加布里埃尔的回答:
qselect -u <username> | xargs qdel
qselect -u <username> -s <state> | xargs qdel
<state>
将 R
仅用于 运行 个职位。
qselect 将允许您根据其他条件 select 作业,例如请求的资源 (-l)、目标队列 (-q) ...
qdel -u <username>
仅适用于 SGE
# 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
只需使用以下命令:
qdel all
它将取消集群上的所有作业 运行。
有时简单的 grep/cut
也有帮助:
qstat | grep $USER | cut -d. -f1 | xargs qdel
这样我们还可以 grep
对职位的特定关键字进行删除。
HTH
qstat | cut -d. -f1 | sed "s; \(.*\) 0;qdel ;" | bash
sed 的强大功能。
尝试
$ qdel {id1..id2}
例如:
$ qdel {1148613..1148650}
一周:
qstat -u | gawk '{print $1}' | xargs qdel