如何根据作业名称取消多个作业

如何根据作业名称取消多个作业

我正在集群上运行多个作业,但是我想根据其名称而不是作业 ID 取消多个作业。我阅读了 slurm 文档,发现我可以使用 scancel -n jobname 取消它们,但我不想一一删除,而是想一次批量删除它们。 slurm 作业屏幕的作业名称如下所示

spc_2.30
spc_3.20 
spc_3.10 
spc_3.00 
spc_2.40
spc_3.30      
spc_3.20              
spc_3.10  
spc_2.50  
spc_3.40  
      

在这种情况下,有人可以建议一种根据这些名称取消作业的方法吗?

答案1

为了使其可重用,我将分两步进行,获取过滤后的列表,请参阅下面的选项 1,然后将其提供给scancel命令,或者在其他选项中快速而肮脏地执行,未经过充分测试,共享我的脚本

选项 1:构建一个 cancl 脚本,以过滤作业并将其作为srun


#!/bin/bash

#check processes in some mode, for e.g. standby, which matches with our process name
ps T |grep $1 |grep -v 'grep' |grep -v $0 |awk '{print $1}' > /tmp/temp.txt

i=0
if [ $(cat /tmp/temp.txt |wc -l) -eq 0 ];
then
        echo "there are no slurm jobs to kill"
else
#if there are slurm jobs, kill and count them to know how many processes have been killed
while read pid
do
        #scancel <jobid> use this to cancel each job iteratively in blocking mode
        scancel $pid
        echo "Slurm job, $pid killed \n"
        i=$((i+1))
done < /tmp/temp.txt
#show how many Slurm jobs have been killed
echo "$i Slurm jobs killed"
fi
rm /tmp/temp.txt

选项 2 是


你可以取消工作$ scancel jobinXX

选项 3 是


我设置了节点、状态和

squeue --me --nodelist=awsEC200n37a,awsEC200n37b  --states=RUNNING,PENDING --Format=jobid,name --noheader | grep augcl | awk '{print $1}'  | xargs scancel

相关内容