Вот есть такой пост у коллег, и хочу добавить - перестаньте использовать cron, пожалуйста! Вы можете поспорить - мол, нужно выбирать подходящие инструменты под задачи и тд и тп. Нет! Это так не работает - можно написать грамотный bash скрипт, который репортит о том что не смог отработать или слать репорты в логи и собирать потом попытки неудачного выполнения, но никто так не делает! Я постоянно вижу неработающие скрипты в cron, которые перестали выполнятся полгода назад и никто об не знает. crond решает только одну задачу - он обязуется запустить некую задачу в определенное время. Проконтроллировать успешность выполнения? Проследить чтобы задача отвалилась по таймауту, если что-то пошло не так? Проследить, чтобы не запускалось несколько задач и не было "гонки". Посмотреть выхлоп запуска двухмесячной давности? Все эти проблемы crond не решает! Вы можете городить многоэтажные bash скрипты и пытаться угадать всевозможные сценарии того что может пойти не так, а можете просто не использовать crond. Современная система запуска задач по расписанию должна быть централизована, желательно с возможностью обеспечить отказоустойчивость, она должна уметь сообщать вам или овнеру процесса о неуспешности попытки запуска и уметь хендлить ошибки, должна иметь историю запусков, запускать задачи параллельно на многих инстансах и удобный механизм включения-выключения запуска на группе инстансов по необходимости. Круто если она при этом еще будет уметь скейлится. Более или менее "идеальный" cron описан в SRE book от google. Мы выбрали для себя Rundeck, кое где я вообще в таких случаях использовал Jenkins - они не удовлетворяют некоторым из требований выше, но даже это в разы лучше мертвых башнянок, которые годами пытаются безуспешно запуститься. Если вы знаете еще примеры нормальной замены cron - пишите, я с удовольствием опубликую.
#dontusecron #cron #гдеавторскийконтент #hate