我正在集群上运行多个作业,但是我想根据其名称而不是作业 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