2014-01-16 46 views
4

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

因此,如何删除所有Idle作业而无需触摸Running作业?

+0

请粘贴几行文字和'qstat'输出的标题以及您常用的选项组合。通过解析该输出,您通常可以精确提取您想要删除的作业的ID。 –

回答

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

如果作业ID是按顺序,你可以使用bash的支柱延伸。例如:

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

转入删除为1000年至2000年的所有作业,qdel命令是:

qdel {1000..2000} 

威力即使有,你不准作业ID工作删除(从其他用户)。他们应该被忽略。 (未测试)