Советы по Cron, как не запускать задания Cron в праздничные дни (понедельник трехдневных выходных)

Советы по Cron, как не запускать задания Cron в праздничные дни (понедельник трехдневных выходных)

У нас установлено около сотни машин, на каждой из которых выполняются задания cron, такие как запуск и остановка служб, а также архивация файлов журналов этих служб в конце дня в централизованном репозитории.

Одна из наших головных болей — это трехдневные выходные (мы закрыты в праздники). Мы не хотим, чтобы сервисы запускались в эти дни и подключались к машинам наших деловых партнеров.

В настоящее время мы делаем это, вручную комментируя самые важные задания и позволяя целому дню происходить куче ошибок. Не идеально.

По сути, если в поле дня работы указано «1-5», мы хотим, чтобы это означало «рабочие дни», а не «с понедельника по пятницу». У нас есть база данных, которая отслеживает, какие дни действительно являются «рабочими».

Итак, можно ли переопределить алгоритм сопоставления дней в Cron или есть какой-то другой способ легко задать настройки Cron, чтобы избежать запуска в праздничный понедельник?

Спасибо!

решение1

Cron не поддерживает такого рода определение. Это очень быстро становится очень сложным. Здесь, в Канаде, праздники даже не согласованы между провинциями.

Я бы написал скрипт-бегун, который проверяет базу данных праздников и выходит, если это праздник. Попробуйте что-то вроде:

#!/bin/баш

СЕГОДНЯ=$(дата +%Г%м%д)
если grep -q $TODAY /etc/holidays; тогда
   echo Пропуск отпуска за $*
   выход 0
фи

$*

решение2

Я могу представить несколько способов сделать это, но наиболее практичное решение будет зависеть от точной настройки всех заданий cron. Например:

Если базу данных рабочих дней можно опросить с помощью скрипта, вы могли бы запустить задание cron в воскресенье, которое определяет, является ли следующий день (понедельник) рабочим днем ​​или нет, и устанавливает/очищает файл где-то. Все задания cron могли бы искать наличие этого файла и выбирать, запуститься или выйти соответственно.

ИЛИ

Вы можете заменить все отдельные записи cron одним главным заданием, которое запускает все остальные только в том случае, если (проверяемая) база данных сообщает, что это рабочий день.

Связанный контент