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

时间:2019-04-17 13:32:48

标签: cron slurm

我目前正在使用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文件中添加一些条件逻辑吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的脚本:

#!/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将返回非零退出代码,并且|| sbatch将被执行。

用运行上述脚本的一行替换cron文件中的三行。