取消在某个日期之前提交或 JOBID 低于给定整数的作业

Cancel jobs submitted previous to a date or with JOBID lower than a given integer

我发现使用我的软件的早期版本提交的作业由于存在错误而无法使用,因此我想取消它们。但是,我也有新的工作想保留 运行。所有作业都具有相同的作业名称,并且 运行 在同一分区中。

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

#!\bin\bash

if [  ]
then
    MAX_JOBID=
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 附加到作业名称来克服这种情况?

遗憾的是,在这种情况下没有直接的方法取消作业。

或者,正如您所指出的,通过添加软件 version/commit 和作业名称来命名作业很有用。在这种情况下,您可以使用 scancel --name=JOB_NAME_VERSION 取消具有该作业名称的所有作业。

此外,如果可以使用 scontrol hold <jobid> hold 新提交的作业,然后可以使用 scancel --state=PENDING

取消所有 PENDING 作业

在我的例子中,我使用了类似的方法(就像你的方法),通过 squeue 将输出通过管道传输到 awk 并取消了我想要删除的前 N ​​个作业。它是一个 one-liner 脚本。

像这样:

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

除了@j23 的建议之外,您还可以使用

来组织您的工作