Comment utiliser qdel all pour supprimer uniquement les travaux inactifs

J’ai un problème où si j’ai 2000 emplois en queue et essayez de les supprimer avec qdel all , il continuera à essayer de supprimer les travaux en cours en premier. Cela signifie que je dois attendre longtemps que les travaux soient supprimés, car la suppression de la liste Running est plus lente que la liste Idle .

Comment puis-je supprimer tous les travaux Idle sans toucher les travaux en cours?

Si les ID de travail sont dans un ordre séquentiel, vous pouvez utiliser l’ extension d’accolade de Bash. Par exemple:

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

Transféré pour supprimer tous les travaux allant de 1000 à 2000, la commande qdel serait:

 qdel {1000..2000} 

Cela peut même fonctionner s’il existe des ID de travail que vous n’êtes pas autorisé à supprimer (des autres utilisateurs). Ils devraient être simplement ignorés. (pas testé)

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

Si vous préférez utiliser un script shell, vous pouvez configurer quelque chose comme ça ci-dessous. Si vos travaux inactifs sont dans un ordre numérique, c’est la solution la plus simple qui ne repose pas sur la définition des variables appropriées dans le couple.

 #!/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