#Что происходит и когда это важно
При наличии .timer ожидаемый журнал задания отсутствует, расписание отличается от планируемого, или таймер active, но связанная .service выдаёт ошибку.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Неверно задано OnCalendarВыражение вычисляет другое время. | systemd-analyze calendar показывает неожиданное Next elapse. | Исправить строку после проверки с учётом зоны. |
| Таймер не активенФайл существует, но systemd его не запустил. | systemctl list-timers --all показывает n/a либо таймер отсутствует. | Проверить enabled и active состояния. |
| Задача падаетТаймер срабатывает, но программа возвращает ошибку. | В журнале связанного service ошибка. | Исправлять само задание, не таймер. |
| Пропущено время выключенного ПКТаймер OnCalendar не настроен на отработку пропущенных периодов. | Компьютер был выключен в назначенное время. | Рассмотреть Persistent=true по характеру задания. |
#Пошаговая диагностика и исправление
- Проверьте правильность системного времениОткройте Терминал, выполните
timedatectl status. Если часовой пояс или часы неверны, календарное расписание будет неверным; сначала исправьте время штатно, не перенастраивайте все таймеры. - Покажите активные и неактивные таймерыВыполните
systemctl list-timers --all. Найдите ИМЯ.timer; сравните NEXT, LAST и ACTIVATES. Если его нет, проверьтеsystemctl status ИМЯ.timer --no-pager; возможно, файл не загружен или это пользовательский таймер (systemctl --user). - Посмотрите фактическое расписаниеВыполните
systemctl cat ИМЯ.timerи найдитеOnCalendar,AccuracySec,RandomizedDelaySec,Persistent,Unit. Они влияют на время и срабатывание. Таймер может запускать сервис с другим именем черезUnit=. - Проверьте календарное выражениеВыполните
systemd-analyze calendar "Mon..Fri 08:00", заменив пример своей строкой OnCalendar. Вывод покажет нормализованное выражение и ближайшее срабатывание. Не копируйте строку примера, если расписание у вас иное. - Выясните, был ли запуск и что сделал сервисПосмотрите
journalctl -u ИМЯ.timer -b --no-pagerиjournalctl -u ИМЯ.service -b --no-pager, заменяя имена реальными. Если таймер сработал, но задача упала, проверяйте ошибку сервиса; запуск вручную может отличаться от прав и окружения systemd. - Исправляйте только подтверждённую причинуЕсли таймер отключён, администратор после согласования запускает
sudo systemctl enable --now ИМЯ.timer, не сервис, а именно таймер. Для изменения календарного выражения безопаснее создать переопределение, сохранить копию конфигурации и проверить выражение черезsystemd-analyze calendarдо применения.Persistent=trueполезен только для некоторых календарных заданий и может вызвать немедленный запуск накопившегося дела. - Проверьте следующий запуск и откатПосле перечитывания unit-файлов проверьте новый NEXT через
systemctl list-timers --all. В заранее согласованное окно дождитесь реального запуска и проверьте результат задачи, а не только запись в журнале. При непредвиденных запусках верните прежний файл и выключите добавленный таймер.
#Команды из инструкции с пояснениями
timedatectl statussystemctl list-timers --allsystemctl cat ИМЯ.timersystemd-analyze calendar "Mon..Fri 08:00"#Как проверить результат
В list-timers отражено правильное следующее время, журнал подтверждает реальное срабатывание, а связанная программа успешно выполнила задачу.
#Если проблема не устранена
Если время верное, но сервис не срабатывает, проверьте его имя в Unit= и ошибки приложения. Не включайте вручную разрушающие задания для проверки.