Служба watchdog systemd убивает сервисы после ручного изменения системного времени.

Вопрос или проблема

Я исследовал проблему, которая, похоже, связана с watchdog systemd, но безуспешно. У меня есть несколько служб типа Type=notify. Если системное время установлено назад, каждая служба убивается systemd, потому что он считает, что таймаут watchdog был превышен. Вот отладочный журнал от systemd:

systemd[1]: xxx:service: Юнит вошел в состояние ошибки.
systemd[1]: xxx:service: Неудача с результатом 'watchdog'.

Есть ли способ сказать Systemd не перезапускать службы, когда системное время изменяется вручную?

Разве не должно watchdog зависеть от CLOCK_MONOTONIC? Это известная проблема в Systemd?

Есть ли способ сказать Systemd не перезапускать службы, когда системное время изменяется вручную?

Нет. Согласно документации в man systemd.service для WatchDogSec=, нет гарантии, что systemd будет отслеживать это, используя монотонный таймер, так что это работает так, как заявлено.

Если вы считаете, что поведение следует изменить, вы можете обсудить это с разработчиками systemd или открыть проблему:

https://github.com/systemd/systemd/issues?utf8=%E2%9C%93&q=WatchDogSec%3D

Ответ или решение

Проблема, с которой вы столкнулись, связана с механизмом работы системного менеджера systemd и его интеграцией с функцией мониторинга (watchdog) для служб, которые настроены с использованием параметра Type=notify. Давайте подробно рассмотрим эту ситуацию.

Причины проблемы

Когда вы вручную изменяете системное время назад, systemd может интерпретировать это как превышение времени ожидания (timeout) для службы с активированным watchdog, что приводит к её автоматическому завершению. Это поведение, к сожалению, не зависит от типа таймера, который поддерживает система. Как вы уже заметили, в документации по man systemd.service указано, что параметр WatchDogSec= не гарантирует использование монотонного таймера, что означает, что изменения системного времени могут оказывать влияние на работу служб.

Решение проблемы

К сожалению, нет прямого способа отключить автоматическую перезапуск служб systemd при изменении системного времени. Если вы хотите, чтобы systemd не перезапускал службы в таких ситуациях, вам потребуется изменить подход к мониторингу этих служб. Вот несколько возможных подходов:

  1. Измените параметры службы:
    Рассмотрите возможность изменения типа службы с Type=notify на Type=simple или Type=forking, если это возможно в вашем случае. Таким образом, вы исключите использование watchdog для этих служб.

  2. Переопределение поведения watchdog:
    Если используется watchdog, вам стоит попробовать увеличить значение параметра WatchDogSec=, чтобы обеспечить большее время на реакцию для служб, если они почувствуют "падение" времени.

  3. Обсуждение с разработчиками:
    Если вы считаете, что такая логика работы systemd является проблемой, вы можете поднять этот вопрос (или создать проблему) в репозитории на GitHub для systemd. Обсуждение с разработчиками может привести к изменению текущего поведения.

    Ссылка для обсуждения: GitHub – systemd issues

Заключение

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

Если у вас есть еще вопросы или вам нужна дальнейшая помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...