Инженерные заметки
Автоматизация

systemd timers вместо cron

Как запускать задачи по расписанию с журналом, зависимостями и ограничениями.

· 6 мин чтения

Зачем таймеры

Таймер запускает связанную службу, поэтому вывод попадает в journald, работают зависимости и ограничения ресурсов. Cron проще, но не даёт этих возможностей.

Служба и таймер

ini
# /etc/systemd/system/backup.service
[Unit]
Description=Копия конфигураций

[Service] Type=oneshot ExecStart=/usr/local/bin/backup-configs.sh

ini
# /etc/systemd/system/backup.timer
[Unit]
Description=Ежедневная копия конфигураций

[Timer] OnCalendar=*-*-* 03:00:00 Persistent=true RandomizedDelaySec=300

[Install] WantedBy=timers.target

Запуск

bash
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers
sudo systemctl start backup.service

Особенности

Persistent=true запускает пропущенную задачу после включения машины. systemd-analyze calendar "Mon *-*-* 03:00" проверяет выражение расписания до применения.

Диагностика

bash
journalctl -u backup.service --since today
systemctl status backup.timer
Подсказка. Если таймер не срабатывает, проверьте, включён ли именно .timer, а не .service.

Вывод

Для регулярных задач на современном Linux таймеры дают журнал, управляемость и предсказуемость. Начните с одной задачи и проверяйте её вручную командой start.

Связанные статьи