#Когда возникает проблема и к каким системам относится
Таймер не запускает работу во время сна или после пробуждения, хотя вручную служба исполняется. Нужно различать запуск по календарю, монотонные интервалы и аппаратную поддержку пробуждения. Rocky Linux с systemd-таймерами на компьютере, выходящем из сна; применение Persistent= относится к OnCalendar, а не ко всем разновидностям таймеров.
#Основные причины: как отличить одну от другой
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Используется монотонный интервалВремя сна не учитывается ожидаемым образом | В unit OnUnitActiveSec и WakeSystem=no | Уточнить семантику интервала вместо копирования Persistent |
| Пропущен календарный запускВо время сна наступило OnCalendar, but Persistent не настроен или были другие условия | systemctl list-timers показывает иной NEXT/LAST | Подобрать условия догоняющего запуска |
| Служба запускается, но падаетTimer elapses, service unit fails | в журнале .service ошибка исполнения | Разбирать службу отдельно от расписания |
#Пошаговая диагностика и устранение неисправности
- Шаг 1. Найдите настоящее имя таймера и его службуВ терминале просмотрите список таймеров, включая неактивные. Укажите точно имя с суффиксом .timer и не путайте его с .service. NEXT и LAST указывают план и последний запуск, но не доказывают успех команды.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
systemctl list-timers --allTIMER="имя.timer"systemctl status "$TIMER" --no-pager
- Шаг 2. Проверьте расписание и тип таймераПрочитайте OnCalendar, OnBootSec, OnUnitActiveSec, Persistent, WakeSystem и Unit. Для Persistent важен OnCalendar: это не универсальное повторение всех пропущенных монотонных запусков.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
TIMER="имя.timer"systemctl cat "$TIMER"systemctl show "$TIMER" -p TimersCalendar -p TimersMonotonic -p NextElapseUSecRealtime -p NextElapseUSecMonotonic
- Шаг 3. Убедитесь, что таймер включён и что запускалась службаactive у таймера означает его работу, а не успешную задачу. Для обычного файла имя службы можно получить заменой суффикса; если в unit указан Unit=, используйте именно его.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
TIMER="имя.timer"SERVICE="имя.service"systemctl is-enabled "$TIMER"systemctl status "$SERVICE" --no-pager
- Шаг 4. Найдите момент сна и событие запускаВ журнале ищите время входа в suspend/resume и срабатывания таймера. Если событие было во сне, сравните его с LAST и фактическим запуском service. Пустая запись LAST для нового unit сама по себе не ошибка.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
journalctl -b --no-pager | grep -Ei "suspend|resume|sleep" | tail -35journalctl -b -u "имя.timer" -u "имя.service" --no-pager -n 70
- Шаг 5. Согласуйте поведение пропущенного календарного заданияЕсли требуется один отложенный запуск после неактивности таймера, проверьте возможность Persistent=yes для OnCalendar. Для периодических задач бизнес-логика должна сама обрабатывать очередь: systemd не повторяет каждое пропущенное срабатывание. Перед изменением сохраните unit, правьте отдельный drop-in через systemctl edit.Linux · Терминал (Bash)С осторожностьюНужен sudoТерминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
sudo systemctl edit имя.timerКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Шаг 6. Не пытайтесь включать пробуждение без аппаратной проверкиWakeSystem=true может будить машину только при соответствующей поддержке и правах, а для пользовательских таймеров обычно недоступен. На виртуальном сервере сон вообще может отсутствовать. Сначала проверьте наличие механизма, затем согласуйте политику питания устройства.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
cat /sys/power/statecat /sys/power/mem_sleep 2>/dev/null || true
- Шаг 7. Примените настройки и проверьте следующий запускПосле сохранения правильного drop-in перечитайте конфигурацию и перезапустите только нужный таймер, в согласованное время. Проверьте, что NEXT вычислен, а LAST меняется при реальном выполнении.
- Терминал Rocky Linux; нужны административные праваLinux · Терминал (Bash)С осторожностьюНужен sudoТерминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
sudo systemctl daemon-reloadsudo systemctl restart имя.timersystemctl list-timers --all | grep "имя.timer"Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как убедиться, что неисправность устранена
После тестового сна или временного отключения расписание срабатывает согласно документированному поведению; в журнале .service подтверждён успешный прикладной результат.
#Если предложенный способ не сработал
Если timer срабатывает, но действие не произошло, анализируйте связанную service и её права. Если таймер вообще не срабатывает, проверьте системные часы, задержку RandomizedDelaySec и возможность сна.