我遇到了一个问题,如果我有 2000 个作业排队并尝试使用 删除它们qdel all
,它将继续尝试首先删除正在运行的作业。这意味着我必须等待很长时间才能删除作业,因为从Running
列表中删除比Idle
列表慢。
因此,我如何在Idle
不触及工作的情况下删除所有Running
工作?
我遇到了一个问题,如果我有 2000 个作业排队并尝试使用 删除它们qdel all
,它将继续尝试首先删除正在运行的作业。这意味着我必须等待很长时间才能删除作业,因为从Running
列表中删除比Idle
列表慢。
因此,我如何在Idle
不触及工作的情况下删除所有Running
工作?
如果作业 ID 是按顺序排列的,则可以使用 Bash 的大括号扩展。例如:
$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
转移到删除范围从 1000 到 2000 的所有作业,qdel
命令将是:
qdel {1000..2000}
如果您不允许(从其他用户)删除作业 ID,这甚至可能会起作用。他们应该被简单地忽略。(未测试)
如果您更喜欢使用 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
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))