如何使用qdel all仅删除空闲作业

时间:2014-01-16 01:27:07

标签: ubuntu cluster-computing qsub torque

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

那么如何在不触及Idle工作的情况下删除所有Running个工作?

3 个答案:

答案 0 :(得分:1)

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

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

转移到删除1000到2000之间的所有作业,qdel命令将是:

qdel {1000..2000}

如果有不允许删除的作业ID(来自其他用户),可能甚至可以正常工作。应该简单地忽略它们。 (未经测试)

答案 1 :(得分: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))

答案 2 :(得分: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