5

我遇到了一个问题,如果我有 2000 个作业排队并尝试使用 删除它们qdel all,它将继续尝试首先删除正在运行的作业。这意味着我必须等待很长时间才能删除作业,因为从Running列表中删除比Idle列表慢。

因此,我如何在Idle不触及工作的情况下删除所有Running工作?

4

3 回答 3

1

如果作业 ID 是按顺序排列的,则可以使用 Bash 的大括号扩展。例如:

$ echo {0..9}
0 1 2 3 4 5 6 7 8 9

转移到删除范围从 1000 到 2000 的所有作业,qdel命令将是:

qdel {1000..2000}

如果您不允许(从其他用户)删除作业 ID,这甚至可能会起作用。他们应该被简单地忽略。(未测试)

于 2015-03-11T15:53:40.123 回答
0

如果您更喜欢使用 shell 脚本,您可以设置如下所示的内容。如果您的空闲作业按数字顺序排列,这是最直接的解决方案,它不依赖于在扭矩中设置适当的变量。

#!/bin/csh                                                                                                             
# delete the range of jobs via counter i                                                                               
module load torque
module load maui
set i = 1351208
while ( $i < 1351668 )
      qdel $i
      @ i++
end
于 2015-01-08T17:46:26.540 回答
0

Python:

    import os
    import subprocess
    cmd = [ 'showq' ]
    output = subprocess.Popen( cmd, stdout=subprocess.PIPE ).communicate()[0]
    jobid = [int(s) for s in output.split() if s.isdigit()]
    jobid2 = []
    for i in jobid:
        if i > 100000:
            jobid2 += [i]


    jobid2.sort()
    jobid2.reverse()
    #jobid2 = jobid2[2000:3000]



    for i in jobid2:
        print len(jobid2)
        os.system('qdel ' + str(i))
于 2014-01-17T15:09:35.807 回答