systemd timer: выполнить пропущенный запуск по расписанию
Свяжите 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После проверки путей перечитайте конфигурацию и включите таймер:
sudo systemctl daemon-reload
sudo systemctl enable --now daily-report.timer
systemctl list-timers daily-report.timerPersistent=true действует только вместе с OnCalendar=: после периода, когда timer был неактивен, systemd запускает пропущенную задачу один раз, а не воспроизводит каждый пропущенный день. Сделайте задачу идемпотентной и задайте в service минимальные нужные права. OnCalendar= использует календарные часы и допускает отклонение в пределах AccuracySec. Параметр Persistent доступен в systemd 212+. См. systemd.timer.