ジョブ名に基づいて複数のジョブをキャンセルする方法

ジョブ名に基づいて複数のジョブをキャンセルする方法

私はクラスタで複数のジョブを実行していますが、ジョブIDの代わりに名前に基づいて複数のジョブをキャンセルしたいと思います。 slurmドキュメントを読み、scancel -n jobnameを使用してキャンセルできることがわかりましたが、1つずつ削除する代わりに一括削除したいと思います。 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

再利用できるように、2段階に進みます。フィルタリングされたリストを取得するには、以下のオプション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

おすすめ記事