centos7 – named запускается вручную, но systemctl сообщает о таймауте

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

named запускается и работает нормально, если я запускаю его вручную (“/usr/sbin/named -u named”), но когда я запускаю его с помощью systemctl, он выдает ошибку:

# systemctl start named
Job for named.service failed because a timeout was exceeded. See "systemctl status named.service" and "journalctl -xe" for details.

Статус показывает обычные сообщения named, однако “ps alx”, пока он все еще работает, показывает, что он как будто ищет ввод пароля где-то, чего он не должен делать, но, возможно, это особенность systemctl и просто ложный след:

4     0 18608 28440  20   0 134824  1296 poll_s S+   pts/1      0:00 systemctl start named
0     0 18609 18608  20   0  15428   824 poll_s S+   pts/1      0:00 /usr/bin/systemd-tty-ask-password-agent --watch
0     0 18610 18608  20   0 294680  3056 poll_s Sl+  pts/1      0:00 /usr/bin/pkttyagent --notify-fd 5 --fallback
5    25 18624     1  20   0 294512 146616 sigsus Ssl ?          0:06 /usr/sbin/named -u named -c /etc/named.conf

В любом случае, надеюсь, кто-то знает, в чем дело…

Вы можете проверить конфигурацию named.conf с помощью команды named-checkconf.

named-checkconf /etc/named.conf

Если команда не выдает никаких сообщений, то ваша конфигурация named.conf в порядке.

Если есть ошибка, вы увидите ссылку на ошибку.

Проблема оказалась в том, что systemd искал файл процесса PID в другом месте, чем его создавал named.conf:

May  3 16:04:59 ns2 systemd: PID file /run/named/named.pid not readable (yet?) after start.
options {
        directory       "/var/named";
        pid-file        "/var/run/named/pid";
}

Для меня (Ubuntu 24.04.2) файл юнита по умолчанию в /usr/lib/systemd/system/named.service имел Type=notify и по какой-то причине это вызывало ошибку.

Стандартная практика — скопировать в /etc перед изменением (пусть ОС управляет /usr и /lib). Эта команда убедится, что в /etc нет файла службы, а затем создаст его:

[ -f /etc/systemd/system/named.service ] || \
cp /usr/lib/systemd/system/named.service /etc/systemd/system/named.service

Затем используйте ваш редактор, чтобы закомментировать эту строку с помощью точки с запятой (;) или хэша (#):

Type=notify

Это позволит ей вернуться к значению по умолчанию Type=simple.

Перезапустите службу, чтобы завершить задачу.

systemctl stop named
systemctl daemon-reload
systemctl start named

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

Проблема запуска службы named на CentOS 7, которая стартует вручную, но сообщает о тайм-ауте при использовании systemctl, часто связана с несовпадением конфигураций между systemd и самим приложением named. Ниже приведена попытка детально рассмотреть проблему и предложить решения для исправления ситуации.

Теоретическая часть

Конфигурация и система инициализации

systemd — это система инициализации и управления сервисами в современных дистрибутивах Linux, в том числе в CentOS 7. Одной из функций systemd является мониторинг жизненного цикла служб и управление ими с использованием файлов конфигураций, известных как "unit-файлы".

Когда systemd пытается запустить службу, он следит за процессом, используя тип загрузки, указанный в unit-файле. В вашей ситуации unit-файл по умолчанию настроен на Type=notify. Этот тип требует, чтобы сервис отправлял уведомление READY=1, когда он готов. Если такое уведомление не придёт, systemd определяет, что служба не стартовала корректно, и выводит сообщение о тайм-ауте.

Файл PID

Файл PID (Process ID) играет ключевую роль в идентификации запущенного процесса. В named файлы PID по умолчанию могут располагаться в разных директориях, что требует управлять этой информацией согласовано как в конфигурации самого приложения, так и в unit-файлах.

Примеры и анализ

  1. Конфигурация named (named.conf)

    Из предоставленных данных видно, что конфигурация named, позиционирует файл pid в /var/run/named/pid. Это местоположение должно совпадать с тем, что ожидает systemd.

    options {
       directory       "/var/named";
       pid-file        "/var/run/named/pid";
    }
  2. Системный журнал и диагностика

    Работа с systemctl показывает тайм-аут, однако ps alx демонстрирует, что служба запускается, но вероятно ждёт ввода пароля, что может быть ложным выводом.

    При этом, лог May 3 16:04:59 ns2 systemd: PID file /run/named/named.pid not readable (yet?) after start указывает на проблему с доступностью файла PID в ожидаемом местоположении. Это может быть связано с тем, что разные компоненты системы ожидают файл по разным адресам.

  3. Файл unit

    Конфигурация unit-файла должна корректно описывать путь к файлу PID и корректный тип загрузки.

    [Unit]
    Description=BIND Domain Name Server
    
    [Service]
    Type=simple  # Изменение с notify на simple может помочь избежать неудачных попыток согласования уведомлений.
    PIDFile=/var/run/named/pid  # Убедитесь, что этот путь соответствует `named.conf`.
    
    [Install]
    WantedBy=multi-user.target

Применение и исправление

  1. Обновление unit-файла

    Во избежание некорректных изменений в системных директориях, единицей конфигурации systemd лучше управлять в /etc/systemd/system/.

    [ -f /etc/systemd/system/named.service ] || cp /usr/lib/systemd/system/named.service /etc/systemd/system/named.service

    После чего, отредактируйте файл: закомментируйте строку с Type=notify, чтобы systemd перешел на дефолт Type=simple.

  2. Согласование путей к файлам PID

    Убедитесь, что PIDFile в конфигурации systemd совпадает с тем, что установлен named.

  3. Перезапуск службы

    После всех изменений выполните следующие команды:

    systemctl stop named
    systemctl daemon-reload
    systemctl start named

    Эти шаги позволят системе распознать новые конфигурационные изменения и корректно стартовать службу.

Синхронизация ожиданий systemd и конфигурации named критична для устойчивой работы службы. Ваша задача — убедиться, что все компоненты системы корректно взаимодействуют друг с другом, особенно в части управления процессами и их идентификацией через PID файлы. Надеюсь, это решение поможет в устранении тайм-аута при запуске службы named.

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

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