Cloud Channels

Заметки о сетях и серверах

systemd-таймеры вместо cron

16 октября 2026

cron по-прежнему работает, но на сервере с systemd у таймеров есть несколько практичных преимуществ: журнал каждого запуска в journalctl, понятный статус «когда запускалось и когда запустится», ограничения ресурсов и защита от параллельного запуска той же задачи.

Пара unit + timer

Задача описывается обычным сервисом с Type=oneshot, а расписание — отдельным таймером с тем же именем.

# /etc/systemd/system/backup.service
[Unit]
Description=Ночной бэкап

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Запуск бэкапа каждую ночь

[Timer]
OnCalendar=*-*-* 03:30
RandomizedDelaySec=10m
Persistent=true

[Install]
WantedBy=timers.target

Persistent=true запускает пропущенную задачу после включения сервера, если в момент срабатывания он был выключен. RandomizedDelaySec размывает время запуска — полезно, когда одинаковые таймеры стоят на многих машинах.

Включение и проверка

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -n 50

Проверить, как systemd понимает выражение расписания, можно до включения таймера:

systemd-analyze calendar "*-*-* 03:30"

Когда cron всё же удобнее

Для пользовательских задач на машинах без systemd и там, где расписание правят люди, привыкшие к crontab -e. В остальных случаях таймеры дают больше контроля при той же простоте.

← Все заметки