我遇到一个问题,如果我排队了2000个作业并尝试用qdel all
删除它们,它会继续尝试先删除正在运行的作业。这意味着我必须等待很长时间才能删除作业,因为从Running
列表中删除比Idle
列表慢。
那么如何在不触及Idle
工作的情况下删除所有Running
个工作?
答案 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