Таймер не работает после перезагрузки
Таймер, запущенный командой start, живёт до перезагрузки. Чтобы он поднимался сам, его нужно включить, а в unit-файле должна быть секция [Install] с WantedBy=timers.target.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Таймер запущен, но не включён
Команда
startдействует до перезагрузки,enableсоздаёт ссылку автозапуска. Разница обнаруживается только после перезагрузки сервера. -
В unit-файле таймера нет секции [Install]
Без неё команда включения выдаст ошибку об отсутствии установочной конфигурации.
-
Указана не та цель
WantedBy=multi-user.targetдля таймера тоже сработает, но принято использоватьtimers.target: так таймеры собраны в одном месте и их проще обслуживать.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
После перезагрузки покажет, поднялся ли таймер вообще.
systemctl list-timers --all --no-pagerОдно слово вместо разбора вывода: enabled, disabled или static.
systemctl is-enabled myapp.timerСсылки автозапуска таймеров: отсутствие вашей — прямой ответ.
ls -l /etc/systemd/system/timers.target.wants/Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Команда
startдействует до перезагрузки,enableсоздаёт ссылку автозапуска. Разница обнаруживается только после перезагрузки сервера.
- Как проверить
-
Посмотрите состояние включения.
systemctl is-enabled myapp.timer systemctl status myapp.timer --no-pager | head -6
- Как исправить
-
Включите таймер, желательно сразу с запуском.
sudo systemctl enable --now myapp.timer
- Почему происходит
- Без неё команда включения выдаст ошибку об отсутствии установочной конфигурации.
- Как проверить
-
Посмотрите файл.
systemctl cat myapp.timer | tail -5
- Как исправить
-
Добавьте секцию с указанием цели таймеров и включите заново.
[Install] WantedBy=timers.target
- Почему происходит
WantedBy=multi-user.targetдля таймера тоже сработает, но принято использоватьtimers.target: так таймеры собраны в одном месте и их проще обслуживать.
- Как проверить
-
Посмотрите цель.
systemctl show myapp.timer -p WantedBy
- Как исправить
-
Замените цель на
timers.target, перечитайте конфигурацию и включите таймер заново.
Пример вывода
Таймер работает, но в автозапуске его нет. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ systemctl status myapp.timer
● myapp.timer - Run myapp daily
Loaded: loaded (/etc/systemd/system/myapp.timer; disabled; preset: enabled)
Active: active (waiting) since Mon 2026-09-15 10:00:12 MSK; 2h ago
Trigger: Tue 2026-09-16 00:00:00 MSK; 12h left
Ключевое слово в строке Loaded — «disabled». Таймер сейчас работает, но после перезагрузки не поднимется.
Связанные ошибки
- Unit … has no installation config: не включается автозапуск systemctl enable отказывает: в unit-файле нет секции [Install] или WantedBy. Как включить службу в автозапуск правильно.
- Таймер активен, но не срабатывает Таймер systemd в состоянии active, но служба не запускается. Разбор: нет условия срабатывания, таймер не включён, ошибка в OnCalendar.
- Таймер сработал, а служба не найдена Таймер срабатывает, но запускать нечего: имя службы не совпадает или Unit= указывает на отсутствующий unit.
- Failed to parse calendar expression: ошибка в OnCalendar systemd не разбирает календарное выражение таймера. Правила записи OnCalendar и проверка через systemd-analyze calendar.
- Unit is masked: служба запрещена к запуску Сообщение Unit is masked: unit заблокирован ссылкой на /dev/null. Как найти и снять маскировку.
- WantedBy= в неверной секции: автозапуск не работает Параметр WantedBy= указан в [Unit] вместо [Install]. Служба запускается вручную, но не поднимается после перезагрузки.
- clocksource: Marking clocksource unstable Ядро переключило источник времени. Службы видят скачки времени, таймеры срабатывают не тогда, когда ожидалось.
- status=212/TIMERSLACK в systemd Код 212/TIMERSLACK: не удалось задать допуск таймеров процесса из TimerSlackNSec=. Редкий код.
Источники
-
systemd.timer(5)
Включение таймеров и цель timers.target. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено запуском таймера без включения и перезагрузкой тестовой машины.