![Советы по Cron, как не запускать задания Cron в праздничные дни (понедельник трехдневных выходных)](https://rvso.com/image/1263747/%D0%A1%D0%BE%D0%B2%D0%B5%D1%82%D1%8B%20%D0%BF%D0%BE%20Cron%2C%20%D0%BA%D0%B0%D0%BA%20%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F%20Cron%20%D0%B2%20%D0%BF%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D1%87%D0%BD%D1%8B%D0%B5%20%D0%B4%D0%BD%D0%B8%20(%D0%BF%D0%BE%D0%BD%D0%B5%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%20%D1%82%D1%80%D0%B5%D1%85%D0%B4%D0%BD%D0%B5%D0%B2%D0%BD%D1%8B%D1%85%20%D0%B2%D1%8B%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D1%85).png)
У нас установлено около сотни машин, на каждой из которых выполняются задания cron, такие как запуск и остановка служб, а также архивация файлов журналов этих служб в конце дня в централизованном репозитории.
Одна из наших головных болей — это трехдневные выходные (мы закрыты в праздники). Мы не хотим, чтобы сервисы запускались в эти дни и подключались к машинам наших деловых партнеров.
В настоящее время мы делаем это, вручную комментируя самые важные задания и позволяя целому дню происходить куче ошибок. Не идеально.
По сути, если в поле дня работы указано «1-5», мы хотим, чтобы это означало «рабочие дни», а не «с понедельника по пятницу». У нас есть база данных, которая отслеживает, какие дни действительно являются «рабочими».
Итак, можно ли переопределить алгоритм сопоставления дней в Cron или есть какой-то другой способ легко задать настройки Cron, чтобы избежать запуска в праздничный понедельник?
Спасибо!
решение1
Cron не поддерживает такого рода определение. Это очень быстро становится очень сложным. Здесь, в Канаде, праздники даже не согласованы между провинциями.
Я бы написал скрипт-бегун, который проверяет базу данных праздников и выходит, если это праздник. Попробуйте что-то вроде:
#!/bin/баш СЕГОДНЯ=$(дата +%Г%м%д) если grep -q $TODAY /etc/holidays; тогда echo Пропуск отпуска за $* выход 0 фи $*
решение2
Я могу представить несколько способов сделать это, но наиболее практичное решение будет зависеть от точной настройки всех заданий cron. Например:
Если базу данных рабочих дней можно опросить с помощью скрипта, вы могли бы запустить задание cron в воскресенье, которое определяет, является ли следующий день (понедельник) рабочим днем или нет, и устанавливает/очищает файл где-то. Все задания cron могли бы искать наличие этого файла и выбирать, запуститься или выйти соответственно.
ИЛИ
Вы можете заменить все отдельные записи cron одним главным заданием, которое запускает все остальные только в том случае, если (проверяемая) база данных сообщает, что это рабочий день.