.png)
У нас установлено около сотни машин, на каждой из которых выполняются задания cron, такие как запуск и остановка служб, а также архивация файлов журналов этих служб в конце дня в централизованном репозитории.
Одна из наших головных болей — это трехдневные выходные (мы закрыты в праздники). Мы не хотим, чтобы сервисы запускались в эти дни и подключались к машинам наших деловых партнеров.
В настоящее время мы делаем это, вручную комментируя самые важные задания и позволяя целому дню происходить куче ошибок. Не идеально.
По сути, если в поле дня работы указано «1-5», мы хотим, чтобы это означало «рабочие дни», а не «с понедельника по пятницу». У нас есть база данных, которая отслеживает, какие дни действительно являются «рабочими».
Итак, можно ли переопределить алгоритм сопоставления дней в Cron или есть какой-то другой способ легко задать настройки Cron, чтобы избежать запуска в праздничный понедельник?
Спасибо!
решение1
Cron не поддерживает такого рода определение. Это очень быстро становится очень сложным. Здесь, в Канаде, праздники даже не согласованы между провинциями.
Я бы написал скрипт-бегун, который проверяет базу данных праздников и выходит, если это праздник. Попробуйте что-то вроде:
#!/bin/баш СЕГОДНЯ=$(дата +%Г%м%д) если grep -q $TODAY /etc/holidays; тогда echo Пропуск отпуска за $* выход 0 фи $*
решение2
Я могу представить несколько способов сделать это, но наиболее практичное решение будет зависеть от точной настройки всех заданий cron. Например:
Если базу данных рабочих дней можно опросить с помощью скрипта, вы могли бы запустить задание cron в воскресенье, которое определяет, является ли следующий день (понедельник) рабочим днем или нет, и устанавливает/очищает файл где-то. Все задания cron могли бы искать наличие этого файла и выбирать, запуститься или выйти соответственно.
ИЛИ
Вы можете заменить все отдельные записи cron одним главным заданием, которое запускает все остальные только в том случае, если (проверяемая) база данных сообщает, что это рабочий день.