Условное задание cron с использованием планировщика SLURM - PullRequest
1 голос
/ 17 апреля 2019

В настоящее время я выполняю задания в вычислительном кластере, который использует диспетчер рабочей нагрузки 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?

1 Ответ

2 голосов
/ 18 апреля 2019

Вы можете попробовать скрипт, подобный этому:

#!/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 одной строкой, выполняющей вышеуказанный скрипт.

...