Что такое systemd timers и как заменить ими cron для планирования задач

7 минут чтения
Средний рейтинг статьи — 4.9

cron долгие годы оставался стандартным инструментом планирования задач в Linux: простой синтаксис, один файл crontab — и готово. Но с появлением systemd в большинстве современных дистрибутивов появился альтернативный (и во многом более гибкий) механизм — systemd timers. Он тесно интегрирован с системой сервисов, поддерживает более гибкие расписания, удобный логгинг и упрощённый контроль за выполнением заданий.

Почему стоит посмотреть в сторону systemd timers

  • Интеграция с systemd: таймеры запускают обычные systemd-сервисы, значит можно использовать все возможности — зависимости, ограничения по ресурсам, перезапуски.
  • Гибкость расписаний: кроме привычного «каждый час» есть возможность запускать по событиям (загрузка системы, простой) и задавать интервалы в человекочитаемом формате.
  • Удобный журнал: результаты работы попадают в journalctl, не нужно настраивать отдельный вывод логов.
  • Управление стандартными командами systemctl: запуск, остановка, проверка статуса — те же привычные команды.

Структура: два файла

Для планирования задачи нужны два юнита:

  1. service-unit — описывает, что именно выполняется.
  2. timer-unit — описывает, когда выполнять.

Пример: хотим запускать бэкап-скрипт /usr/local/bin/backup.sh каждый день в 2:30.

1. Service unit

Создаём файл /etc/systemd/system/backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
  • Type=oneshot говорит systemd, что сервис выполняется один раз и завершается.

2. Timer unit

Создаём файл /etc/systemd/system/backup.timer:

[Unit]
Description=Run nightly backup at 2:30

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

Ключевые опции:

  • OnCalendar — расписание.
    • Формат: ГГГГ-ММ-ДД ЧЧ:ММ:СС, можно использовать * для шаблонов.
    • Примеры:
      • OnCalendar=hourly — каждый час.
      • OnCalendar=Mon *-*-* 10:00 — по понедельникам в 10:00.
      • OnCalendar=*:0/15 — каждые 15 минут.
  • Persistent=true — если сервер был выключен в момент срабатывания, задача выполнится при следующей загрузке.

Запуск и управление

Перечитываем юниты и включаем таймер:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer

Проверить статус:

systemctl list-timers

Увидите список всех активных таймеров и время до следующего запуска.

Посмотреть логи выполнения:

journalctl -u backup.service

Альтернативы cron-синтаксису

OnCalendar поддерживает короткие ключевые слова:

  • hourly, daily, weekly, monthly, yearly
  • *:0/10 — каждые 10 минут
  • Mon..Fri 09:00 — в будние дни в 9:00

Это заметно удобнее и читабельнее классического crontab.

Дополнительные возможности

  • Запуск по загрузке системы:
[Timer]
OnBootSec=10min

— запустить через 10 минут после старта.

  • Интервальный режим:
OnUnitActiveSec=1h

— выполнять через час после предыдущего успешного запуска.

  • Зависимости: можно указать, что таймер ждёт готовности сети (After=network.target) или запускается только при наличии определённых условий.

Преимущества над cron

Возможностьcronsystemd timers
Человекочитаемые интервалы (5min, hourly)
Логи в journalctl
Зависимости от сервисов
Автоматический запуск пропущенных задач (Persistent)
Единый интерфейс управления (systemctl)

Советы по миграции

  • Для старых скриптов можно просто обернуть их в systemd-сервис без изменений.
  • Если cron уже настроен и работает — нет необходимости срочно переходить. Но для новых проектов timers почти всегда удобнее.
  • Следите, чтобы скрипты корректно завершались с кодом 0: systemd будет считать задачу упавшей при любом ненулевом коде выхода.

Итог

systemd timers — это современная, более гибкая и управляемая замена cron.
Они не только упрощают расписание задач, но и позволяют использовать весь функционал systemd: логи, зависимости, перезапуски. Если вы уже работаете с современными дистрибутивами Linux (Ubuntu, Debian, CentOS, Fedora), имеет смысл делать ставку на timers для всех новых автоматических заданий.

7 минут чтения
Средний рейтинг статьи — 4.9

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний