使用 SLURM 调度程序的条件 cron 作业

Conditional cron job using SLURM scheduler

我目前在使用 slurm 工作负载管理器的计算集群上 运行 工作。我可以查看我目前拥有的所有工作 运行:

$ squeue -u <username>
             JOBID PARTITION  NAME       USER ST     TIME  NODES NODELIST(REASON)
           3379570   sixhour job01 <username> PD     0:00      1 (Priority)
           3409269   sixhour job02 <username>  R 03:06:13      1 n387

所以在这个例子中,我已经提交了两个作业。 job01 待定,job02 已经 运行 大约 3 小时。

我想设置一个 cron 作业,如果它没有在上面的视图中列出,它只会提交作业。以下面的 cron 文件为例:

MAILTO=""
* */1 * * * sbatch job01.sh
* */1 * * * sbatch job02.sh
* */1 * * * sbatch job03.sh

使用此 cron 文件,每个作业将每小时提交一次。但是因为 job01job02 已经列在 squeue -u <username> 下,我只希望 job03 实际提交。

有什么方法可以向 cron 文件添加一些条件逻辑吗?

您可以尝试这样的脚本:

#!/bin/bash

jobnames=$(squeue -h --user <username> --format %j)

for jobname in job{01..03} ; do
grep "$jobname" <<< "$jobnames" >/dev/null || sbatch "$jobname.sh"
done

此脚本将收集与 <username>$jobnames 中提交的作业相关的所有作业名称,然后迭代它应该期望的那些。如果找不到,grep 将 return 非零退出代码并执行 || sbatch

将 cron 文件中的三行替换为上面脚本中的一行 运行。