Авторский канал для тех, кто хочет глубже погрузиться в мир Linux.
Подойдет для разработчиков, системных администраторов и DevOps
Реклама: @dad_admin
Post #358
1.1K
systemd timers: сценарии, которые cron не умеет
Часто cron хватает для простого раз в день, но когда расписание становится хитрым - systemd timers выигрывают. Покажу несколько кейсов, которые на cron делать больно, а здесь - просто.
1️⃣ Только в рабочие дни, с 9:00 до 18:00. Хотим, чтобы скрипт мониторинга нагрузки запускался каждые 15 минут в будни, но не ночью и не в выходные:
Mon..Fri - только будни;
09..18/15:00 - каждые 15 минут с 9:00 до 18:00.
Аналог на cron выглядел бы как несколько строк с костылями.
2️⃣ Persistent=true - выполнение пропущенных задач. Задача должна выполняться раз в день, даже если сервер был выключен ночью.
Если сервак в оффлайне, при старте systemd увидит пропущенное выполнение и запустит задачу.
У cron такого поведения нет - выключил машину, задача пропала.
3️⃣ Замороченные расписания - раз в час, но не в обед. Допустим, хотим запускать скрипт синхронизации каждые 60 минут, но исключить обеденный перерыв (с 12 до 13):
Здесь мы задали диапазоны часов с дыркой.
4️⃣ Несколько расписаний для одной задачи. Хочется иметь и ночной запуск (2:00), и дополнительный в пятницу вечером:
В одном таймере можно указать несколько OnCalendar.
5️⃣ Контроль за пропусками и сбоями. Если критичный скрипт не отработал, мы хотим это видеть. Добавим OnFailure:
Если бэкап упадет, то сразу вызовется alert.service (например, отправка сообщения в телегу).
BashTex 📱 #bash #utils
Часто cron хватает для простого раз в день, но когда расписание становится хитрым - systemd timers выигрывают. Покажу несколько кейсов, которые на cron делать больно, а здесь - просто.
1️⃣ Только в рабочие дни, с 9:00 до 18:00. Хотим, чтобы скрипт мониторинга нагрузки запускался каждые 15 минут в будни, но не ночью и не в выходные:
/etc/systemd/system/load-check.timer
[Timer]
OnCalendar=Mon..Fri *-*-* 09..18/15:00
Mon..Fri - только будни;
09..18/15:00 - каждые 15 минут с 9:00 до 18:00.
Аналог на cron выглядел бы как несколько строк с костылями.
2️⃣ Persistent=true - выполнение пропущенных задач. Задача должна выполняться раз в день, даже если сервер был выключен ночью.
[Timer]
OnCalendar=daily
Persistent=true
Если сервак в оффлайне, при старте systemd увидит пропущенное выполнение и запустит задачу.
У cron такого поведения нет - выключил машину, задача пропала.
3️⃣ Замороченные расписания - раз в час, но не в обед. Допустим, хотим запускать скрипт синхронизации каждые 60 минут, но исключить обеденный перерыв (с 12 до 13):
[Timer]
OnCalendar=Mon..Fri *-*-* 09..11:00,13..18:00
Здесь мы задали диапазоны часов с дыркой.
4️⃣ Несколько расписаний для одной задачи. Хочется иметь и ночной запуск (2:00), и дополнительный в пятницу вечером:
[Timer]
OnCalendar=*-*-* 02:00:00
OnCalendar=Fri *-*-* 19:00:00
В одном таймере можно указать несколько OnCalendar.
5️⃣ Контроль за пропусками и сбоями. Если критичный скрипт не отработал, мы хотим это видеть. Добавим OnFailure:
/etc/systemd/system/backup.service
[Unit]
Description=Nightly backup job
OnFailure=alert.service
Если бэкап упадет, то сразу вызовется alert.service (например, отправка сообщения в телегу).
BashTex 📱 #bash #utils
- 🔥 13
- 👍 7



