systemd Linux (systemd)

systemd: Таймер systemd не запускает задание в ожидаемое время

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Таймер systemd не запускает задание в назначенный час или запускает его позже. Необходимо разделить ошибку календарного выражения, неактивный таймер, неправильные часы и сбой запускаемого сервиса.

В этой статье
  1. Что происходит и когда это важно
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Команды из инструкции с пояснениями
  5. Как проверить результат
  6. Если проблема не устранена

#Что происходит и когда это важно

При наличии .timer ожидаемый журнал задания отсутствует, расписание отличается от планируемого, или таймер active, но связанная .service выдаёт ошибку.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Неверно задано OnCalendarВыражение вычисляет другое время.systemd-analyze calendar показывает неожиданное Next elapse.Исправить строку после проверки с учётом зоны.
Таймер не активенФайл существует, но systemd его не запустил.systemctl list-timers --all показывает n/a либо таймер отсутствует.Проверить enabled и active состояния.
Задача падаетТаймер срабатывает, но программа возвращает ошибку.В журнале связанного service ошибка.Исправлять само задание, не таймер.
Пропущено время выключенного ПКТаймер OnCalendar не настроен на отработку пропущенных периодов.Компьютер был выключен в назначенное время.Рассмотреть Persistent=true по характеру задания.

#Пошаговая диагностика и исправление

  1. Проверьте правильность системного времениОткройте Терминал, выполните timedatectl status. Если часовой пояс или часы неверны, календарное расписание будет неверным; сначала исправьте время штатно, не перенастраивайте все таймеры.
  2. Покажите активные и неактивные таймерыВыполните systemctl list-timers --all. Найдите ИМЯ.timer; сравните NEXT, LAST и ACTIVATES. Если его нет, проверьте systemctl status ИМЯ.timer --no-pager; возможно, файл не загружен или это пользовательский таймер (systemctl --user).
  3. Посмотрите фактическое расписаниеВыполните systemctl cat ИМЯ.timer и найдите OnCalendar, AccuracySec, RandomizedDelaySec, Persistent, Unit. Они влияют на время и срабатывание. Таймер может запускать сервис с другим именем через Unit=.
  4. Проверьте календарное выражениеВыполните systemd-analyze calendar "Mon..Fri 08:00", заменив пример своей строкой OnCalendar. Вывод покажет нормализованное выражение и ближайшее срабатывание. Не копируйте строку примера, если расписание у вас иное.
  5. Выясните, был ли запуск и что сделал сервисПосмотрите journalctl -u ИМЯ.timer -b --no-pager и journalctl -u ИМЯ.service -b --no-pager, заменяя имена реальными. Если таймер сработал, но задача упала, проверяйте ошибку сервиса; запуск вручную может отличаться от прав и окружения systemd.
  6. Исправляйте только подтверждённую причинуЕсли таймер отключён, администратор после согласования запускает sudo systemctl enable --now ИМЯ.timer, не сервис, а именно таймер. Для изменения календарного выражения безопаснее создать переопределение, сохранить копию конфигурации и проверить выражение через systemd-analyze calendar до применения. Persistent=true полезен только для некоторых календарных заданий и может вызвать немедленный запуск накопившегося дела.
  7. Проверьте следующий запуск и откатПосле перечитывания unit-файлов проверьте новый NEXT через systemctl list-timers --all. В заранее согласованное окно дождитесь реального запуска и проверьте результат задачи, а не только запись в журнале. При непредвиденных запусках верните прежний файл и выключите добавленный таймер.

#Команды из инструкции с пояснениями

Linux · Терминал (Bash)Команда
Текущие часы и зона.
timedatectl status
Linux · Терминал (Bash)Команда
Показывает расписание с NEXT/LAST.
systemctl list-timers --all
Linux · Терминал (Bash)Команда
Чтение unit таймера.
systemctl cat ИМЯ.timer
Linux · Терминал (Bash)Команда
Демонстрационное выражение, заменить своим; только расчёт.
systemd-analyze calendar "Mon..Fri 08:00"

#Как проверить результат

В list-timers отражено правильное следующее время, журнал подтверждает реальное срабатывание, а связанная программа успешно выполнила задачу.

#Если проблема не устранена

Если время верное, но сервис не срабатывает, проверьте его имя в Unit= и ошибки приложения. Не включайте вручную разрушающие задания для проверки.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.