Сервер был выключен ночью. Выполнит ли systemd пропущенный бэкап?
Допустим, бэкап запускается каждый день в 03:00 через systemd-таймер. Ночью сервер был выключен, а утром его включили. Запустится ли бэкап после загрузки?
Это зависит от настройки Persistent.
Предположим, что backup.service уже настроен и выполняет резервное копирование. Добавим для него таймер /etc/systemd/system/backup.timer:
[Unit]
Description=Daily backup timer
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
По умолчанию backup.timer запускает одноимённый backup.service. Время в примере указано в часовом поясе сервера.
Загрузим настройки и включим новый таймер:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
Теперь представим, что таймер уже работал, но однажды сервер оказался выключен в 03:00. При следующей активации таймера systemd увидит пропуск и инициирует запуск сервиса.
Для этого Persistent=true хранит на диске отметку о последнем срабатывании. По умолчанию настройка выключена — тогда запуск, пропущенный из-за выключения сервера, не компенсируется.
Есть несколько ограничений:
Если сервер был выключен три дня, таймер не запустит три отдельных бэкапа.
Persistent работает для календарного расписания OnCalendar. Для OnUnitActiveSec эта настройка не действует.
Если backup.service уже активен, таймер не запустит его повторно.
Если задан RandomizedDelaySec, компенсирующий запуск тоже может произойти с задержкой.
Посмотреть расписание и журнал сервиса можно так:
systemctl list-timers --all backup.timer
sudo journalctl -u backup.service -n 50 --no-pager
Persistent=true помогает компенсировать пропущенный запуск. При этом успешность бэкапа всё равно нужно проверять отдельно: срабатывание таймера не означает, что копия создана и пригодна для восстановления.
Здесь возникает вопрос к читателям: ваши задачи после простоя должны запускаться один раз или обрабатывать каждый пропущенный период?