TIL — перевёл задачи с cron на systemd timers
Долго держал все периодические задачи в crontab по привычке. На днях надоело и перевёл их на systemd timers. Записываю плюсы, чтобы потом не гуглить то же самое.
Что мне в итоге понравилось:
- логи задачи лежат в
journalctl -u mybackup.service, а не где-то в почте root или вообще нигде; - можно навесить зависимости — например, запускать только
After=docker.service; OnCalendarчитается человеком, а не как*/15 3 * * 1;Persistent=true— если сервер спал в момент запуска, задача отработает после включения. Cron такое просто молча пропускает.
Минимальная пара файлов. Сервис в /etc/systemd/system/backup.service:
[Unit]
Description=Ночной бэкап
After=docker.service
[Service]
Type=oneshot
ExecStart=/app/scripts/backup.sh
Таймер рядом, backup.timer:
[Unit]
Description=Запуск бэкапа раз в сутки
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
Включается так:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers
list-timers сразу показывает, когда следующий запуск и когда был прошлый — очень удобно, в cron такого обзора из коробки нет. Единственное, к чему привыкаешь: один таск — это два файла вместо одной строки. Для пары задач это перебор, но когда задач десяток и хочется логи и порядок — оно того стоит.