使用 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 文件,每个作业将每小时提交一次。但是因为 job01
和 job02
已经列在 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 文件中的三行替换为上面脚本中的一行 运行。
我目前在使用 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 文件,每个作业将每小时提交一次。但是因为 job01
和 job02
已经列在 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 文件中的三行替换为上面脚本中的一行 运行。