#Симптом и границы применимости
Таймер systemd в Arch Linux не выполняет ожидаемое действие после выхода из сна. Важна разница между календарным OnCalendar и монотонным OnBootSec/OnUnitActiveSec: во сне они ведут себя по-разному.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Монотонный таймер ещё не наступилМонотонный отсчёт в обычной настройке приостанавливается во время сна. | После пробуждения NEXT значительно позже ожидаемого. | Уточнить правильность выбранного типа таймера. |
| Задача запускалась, но завершилась ошибкойТаймер сработал, однако обслуживаемая service-единица не выполнила работу. | Последний запуск есть в журнале, но есть exit-code/ошибки прав. | Диагностировать сервис, а не только таймер. |
| Семантика пропущенных событийCalendar timer после сна запускается один раз при наличии пропущенных сроков, не по одному на каждый. | Ожидают три запуска за три пропущенных часа, произошёл один. | Учесть ограничение поведения; Persistent не означает повторение всех запусков. |
#Подробная диагностика и безопасные действия
- 1. Найдите таймер и цельОткройте терминал; отметьте имя нужного .timer и связанного .service. Системные таймеры показываются systemctl, пользовательские — systemctl --user. Если таймера нет в списке, сначала определите, установлен ли unit.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl list-timers --all --no-pagersystemctl status ИМЯ.timer --no-pager
- 2. Посмотрите расписание и последний запускПроверьте значения NEXT, LAST, Unit и Trigger. Если задан OnCalendar, время сравнивайте с часовым поясом системы, а не с местным временем браузера.
systemctl catпоказывает исходный файл с переопределениями.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.systemctl cat ИМЯ.timersystemctl show ИМЯ.timer -p NextElapseUSecRealtime -p LastTriggerUSec -p Triggers
- 3. Проверьте тип таймера и настройки снаИщите OnCalendar, OnBootSec, OnUnitActiveSec, Persistent и WakeSystem.
Persistent=trueполезно для пропущенного календарного события, когда таймер был неактивен; оно не превращает монотонный таймер в будильник. - Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl show ИМЯ.timer -p TimersCalendar -p TimersMonotonic -p Persistent -p WakeSystem
- 4. Прочитайте журнал таймера и службыУстановите, было ли запланированное срабатывание и чем закончилось выполнение. Для пользовательского таймера подставьте --user в systemctl и journalctl; журналы пользовательских служб читаются от соответствующего пользователя.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
journalctl -b -u ИМЯ.timer --no-pager -n 70journalctl -b -u ИМЯ.service --no-pager -n 70
- 5. Проверьте часы и часовой поясСинхронизация системных часов после сна может изменить расчёт OnCalendar. При неправильном часовом поясе сверяйте расписание с
systemd-analyze calendar, передав точно выражение из unit, например daily. Не меняйте NTP по одному ошибочному запуску. - Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
timedatectl statussystemd-analyze calendar daily
- 6. Проверяйте исправление вне снаЕсли цель таймера — запускать задачу каждый календарный день и unit действительно использует OnCalendar, отредактируйте только нужную настройку через systemctl edit, предварительно скопировав исходный текст. Для обратимого теста разумно отдельно запускать .service вручную, если действие безопасно.Linux · Терминал (Bash)С осторожностьюНужен sudoЗапуск .service может менять данные; применять лишь к безопасной и согласованной задаче.
sudo systemctl start ИМЯ.servicesystemctl status ИМЯ.service --no-pagerКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl list-timers --all --no-pagerjournalctl -b -u ИМЯ.service --no-pager -n 50 - 7. Повторите проверку после следующего пробужденияПосле контролируемого сна посмотрите LAST, NEXT и записи обеих единиц. Если служба отработала лишь один раз после нескольких пропущенных часов, это нормальная семантика OnCalendar. Если она упала, устраните первичную ошибку службы и не изменяйте таймер наугад.
#Как понять, что проблема устранена
Повторите исходное действие, из-за которого возникла неисправность, и сверяйте не только код завершения команды, но и прикладной результат. Сохраните вывод последней диагностической команды и записи журнала до и после исправления. Если ошибка повторяется, верните только изменённую настройку из резервной копии и передайте специалисту точный симптом, имя программы/службы, версию системы и необходимые фрагменты журнала без паролей и закрытых ключей.
#Что делать, если не помогло
Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.