Я ощущаю себя пещерным человеком.
Мне уже много лет, и есть вещи, к которым я привык настолько, что воспринимаю их как константу. Они всегда на своих местах. Они всегда работают. Я никогда не задумываюсь, есть ли что-то еще — потому что зачем, если и так все хорошо?
Когда мне нужно запускать что-то регулярно, с заданной периодичностью — я использую cron. Я не знаю, сколько лет этой утилите. Мне кажется, она была всегда. Открыл crontab -e, написал расписание и забыл. А оно работает.
Но сегодня, решая очередную задачу с периодическим запуском, я с удивлением узнал, что альтернатива существует. Причем довольно давно.
Systemd timer — это механизм планирования задач, встроенный в systemd. Он решает те же задачи, что и cron, но с бо́льшей точностью и бо́льшим количеством опций:
-
Гранулярность до секунд. У cron минимальный интервал — одна минута. У systemd timer такого ограничения нет.
-
Защита от дублирования. Если предыдущий запуск еще не завершился — новый не запустится. Cron этого не контролирует: если скрипт работает дольше интервала, запустится второй экземпляр поверх первого.
-
Логирование через journalctl. Все запуски, выводы, ошибки — в одном месте. Не нужно вручную перенаправлять stdout в файл.
-
RandomizedDelaySec. Случайное смещение времени запуска. Задача стартует не ровно по расписанию, а в случайный момент внутри заданного окна. Это усложняет выявление паттерна по времени — полезно, когда предсказуемость запуска нежелательна.
-
Зависимости. Можно указать, что задача должна запускаться только после поднятия сети, после запуска другого сервиса, после монтирования диска. Cron просто стреляет по расписанию, не глядя на состояние системы (или надо лопатить свои костыли).
-
Persistent. Если система была выключена в момент запланированного пуска — задача выполнится сразу после загрузки. Cron же пропущенные запуски просто теряет.
Совсем недавно мне нужно было настроить автоматическую ротацию случайно генерируемых gRPC-путей между нодами. Для этого можно было бы использовать cron. Но… Наверное, пора выходить из пещеры.
ссылка на оригинал статьи https://habr.com/ru/articles/1025764/