systemd timer: выполнить пропущенный запуск по расписанию

Категория: Bash · Язык: Bash · Обновлено:

Свяжите OnCalendar= с oneshot-сервисом, а Persistent=true используйте, если задача должна запуститься после простоя системы. systemd запомнит время последнего запуска и при следующей активации проверит, пропускалось ли календарное событие.

Service и timer

Создайте /etc/systemd/system/daily-report.service. Укажите существующую команду и выделенную системную учётную запись:

Текст
[Unit]
Description=Generate daily report

[Service]
Type=oneshot
User=reporter
Group=reporter
ExecStart=/usr/local/bin/daily-report

Создайте /etc/systemd/system/daily-report.timer:

Текст
[Unit]
Description=Run daily report at 03:00

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=daily-report.service

[Install]
WantedBy=timers.target

После проверки путей перечитайте конфигурацию и включите таймер:

Bash
sudo systemctl daemon-reload
sudo systemctl enable --now daily-report.timer
systemctl list-timers daily-report.timer

Persistent=true действует только вместе с OnCalendar=: после периода, когда timer был неактивен, systemd запускает пропущенную задачу один раз, а не воспроизводит каждый пропущенный день. Сделайте задачу идемпотентной и задайте в service минимальные нужные права. OnCalendar= использует календарные часы и допускает отклонение в пределах AccuracySec. Параметр Persistent доступен в systemd 212+. См. systemd.timer.