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

Ubuntu 如何使用qdel all仅删除空闲作业,ubuntu,cluster-computing,qsub,torque,Ubuntu,Cluster Computing,Qsub,Torque,我遇到一个问题,如果我有2000个作业排队,并尝试使用qdel all删除它们,它将继续尝试先删除正在运行的作业。这意味着我必须等待很长时间才能删除作业,因为从运行列表中删除作业要比从空闲列表中删除作业慢 因此,如何在不接触正在运行的作业的情况下删除所有空闲的作业 import os import subprocess cmd = [ 'showq' ] output = subprocess.Popen( cmd, stdout=subprocess.PIPE

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

因此,如何在不接触正在运行的作业的情况下删除所有空闲的作业

    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))

如果您喜欢使用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
#/bin/csh
#通过计数器i删除作业范围
模块负载扭矩
模块加载毛伊岛
组i=1351208
而($i<1351668)
qdel$i
@我++
结束

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

$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
传输到删除1000到2000之间的所有作业时,
qdel
命令将为:

qdel {1000..2000}

如果存在不允许(从其他用户)删除的作业ID,此甚至可能会起作用。它们应该被忽略。(未测试)

请使用常用选项组合粘贴几行和
qstat
输出的标题。通过解析此输出,通常可以准确提取要删除的作业的ID。