【发布时间】:2019-04-18 22:17:43
【问题描述】:
我目前正在使用 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 文件中添加一些条件逻辑?
【问题讨论】:
-
不要直接从
cron调用sbatch,而是创建一个脚本,在启动作业之前执行所需的检查并将其替换sbatch。 -
这里的目的是什么?要自动重新提交作业吗?
-
@damienfrancois 我的用例实际上是相反的。我有一个推特机器人设置为按设定的时间间隔运行。有时,根据计算集群的工作负载,我会在队列中堆积 5-6 个作业,一旦空间释放,这些作业最终都会同时运行。如果队列中已经有一个,这将防止额外的 tweet-bot 作业堆积在队列中。