首页 > 解决方案 > 取消在某个日期之前提交或 JOBID 低于给定整数的作业

问题描述

我已经意识到使用我以前版本的软件提交的作业由于错误而没有用,所以我想取消它们。但是,我也有一些新的工作,我想继续运行。所有作业都具有相同的作业名称并在同一分区中运行。

我编写了以下脚本来取消 ID 低于给定 ID 的作业。

#!\bin\bash

if [ $1 ]
then
    MAX_JOBID=$1
else
    echo "An integer value is needed"
    exit
fi

JOBIDLIST=$(squeue -u $USER -o "%F")

for JOBID in $JOBIDLIST
do
    if [ "$JOBID" -lt "$MAX_JOBID" ]
    then
        echo "Cancelling job "$JOBID
        scancel $JOBID
    fi
done

我会说这是开发软件的人经常遇到的情况,我想知道是否有使用 slurm 命令的直接方法。或者,您是否使用一些技巧,例如将软件提交 ID 附加到作业名称来克服这种情况?

标签: slurm

解决方案


不幸的是,在这种情况下没有直接的方法可以取消作业。

或者,就像您指出的那样,通过添加软件版本/提交以及作业名称来命名作业很有用。在这种情况下,您可以使用,scancel --name=JOB_NAME_VERSION取消具有该作业名称的所有作业。

此外,如果可以使用新提交的作业,则可以hold使用取消scontrol hold <jobid>所有作业PENDINGscancel --state=PENDING

在我的情况下,我使用了类似的方法(如你的方法),squeue将输出通过管道传输到awk并取消了我想要删除的前 N ​​个作业。它是一个单行脚本。

像这样的东西:

例如:squeue arguments | awk 'NR>=2 && NR<=N{print $1}' | xargs /usr/bin/scancel


推荐阅读