私はクラスタで複数のジョブを実行していますが、ジョブ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