#Что означает проблема и кому подходит инструкция
Таймер systemd в Ubuntu активен, но задача не отрабатывает после спящего режима. У календарных и интервальных таймеров разная логика; настройка Persistent= относится к пропущенным календарным срабатываниям во время неактивности таймера, а не гарантирует повтор каждого пропущенного интервала сна.
#Возможные причины и отличительные признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Таймер календарный и задача уже выполнялась после пробужденияПри долгом сне несколько событий могут свестись к одному запуску. | journalctl показывает один запуск после возврата. | Проверить ожидаемую семантику и журнал службы. |
| Таймер монотонныйOnUnitActiveSec использует монотонные часы, которые могут останавливаться во сне. | В unit нет OnCalendar, но есть OnUnitActiveSec. | Определить, нужен календарный или интервальный режим. |
| Компьютер не должен просыпаться самБез WakeSystem таймер обычно не будит устройство. | Во сне запуск не происходит, после него задача работает. | Уточнить необходимость пробуждения и поддержку аппаратуры. |
#Диагностика и пошаговое устранение
- 1. Различите таймер и вызываемую службуВ Ubuntu откройте терминал, подставьте правильное имя вместо ИМЯ.timer. Проверьте
list-timers --all: поля NEXT, LAST и ACTIVATES покажут следующее время, предыдущий запуск и службу. Не считайтеactive (waiting)признаком успешной работы скрипта. - Только чтениеLinux · Терминал (Bash)КомандаТолько чтение. Для пользовательского таймера добавьте --user ко всем systemctl.
systemctl list-timers --allsystemctl status ИМЯ.timer --no-pagersystemctl cat ИМЯ.timer
- 2. Узнайте, какой тип расписания указанВ
systemctl catищитеOnCalendar,OnBootSec,OnUnitActiveSec,Persistent,WakeSystemиRandomizedDelaySec. Календарный таймер привязан к часам; монотонный — к длительности и поведению часов. На большинстве ноутбуков таймер без WakeSystem не должен пробуждать машину.Linux · Терминал (Bash)КомандаЕсли параметр не поддерживается данной версией systemd, сверяйтесь с systemctl cat.systemctl show ИМЯ.timer -p ActiveState -p Unit -p NextElapseUSecRealtime -p NextElapseUSecMonotonic
- 3. Проверьте события до сна и после пробужденияДля службы с тем же именем (
ИМЯ.service, если в таймере не задан Unit= другой) посмотрите журнал и отметки времени запуска. Для системного менеджера команды без --user; для пользовательского нужны --user. Промежуток сна сопоставьте с журналами ядра иjournalctl -b. Учтите, что системные часы могли быть скорректированы.Linux · Терминал (Bash)КомандаОтсутствие слов в журнале не доказывает, что сна не было.journalctl -u ИМЯ.service -b --no-pager -n 100journalctl -b --no-pager | grep -Ei "suspend|resume|sleep"
- 4. Выберите правильную семантику пропускаЕсли нужно выполнить пропущенное календарное задание после того, как таймер был выключен, изучите
Persistent=trueв секции [Timer]. Но во время непрерывного сна активный OnCalendar обычно запускает службу после пробуждения один раз, даже при нескольких пропусках. Для интервального заданияPersistent=не действует. Меняйте только собственный unit черезsudo systemctl edit ИМЯ.timer, сохранив предыдущие параметры.Linux · Терминал (Bash)КомандаНе меняйте расписание до понимания требования: допуск одного запуска или необходимость всех отдельных запусков.systemctl cat ИМЯ.timer
- 5. Не включайте WakeSystem без необходимостиДля заданий, которые должны будить устройство, настройка
WakeSystem=trueв [Timer] возможна на поддерживаемом оборудовании и чаще в системном менеджере, но может заметно повлиять на энергопотребление. Проверьте документы изготовителя и политику сна; ноутбуки и виртуальные машины не обязаны поддерживать пробуждение таймером. У обычного пользователя возможность ограничена. - Здесь лишь просмотр: включение пробуждения без согласования не предлагаетсяLinux · Терминал (Bash)КомандаЗдесь лишь просмотр: включение пробуждения без согласования не предлагается.
systemctl cat ИМЯ.timer
- 6. Проверьте ручной тест службы отдельно от расписанияДо изменения таймера согласуйте безопасный одиночный тест
systemctl start ИМЯ.service: он может отправить письма, обновить базу или удалить временные файлы, поэтому без понимания задания не выполняйте. После планового пробуждения сверяйте LAST в list-timers и конкретный результат службы. Еслиfailed, причина в самой службе, а не обязательно в расписании.Linux · Терминал (Bash)КомандаСистемный таймер; для пользовательского используйте варианты --user.systemctl list-timers --allsystemctl status ИМЯ.service --no-pagerjournalctl -u ИМЯ.service -b --no-pager -n 60
#Как убедиться, что неисправность устранена
Корректность подтверждена двумя фактами: таймер показал ожидаемое событие после реального сна, а вызываемая служба завершила свою задачу. Считать одно срабатывание вместо множества ошибкой можно только когда расписание действительно обязано обрабатывать каждый пропуск.
#Если результат не получен
Не повторяйте опасные действия наугад. Сохраните точную формулировку ошибки, вывод диагностики без секретов, версию Ubuntu и данные о затронутом компоненте. Верните лишь собственные изменения из резервной копии; если затронута загрузка, диски или рабочий сервер, воспользуйтесь консолью восстановления либо помощью администратора.