Служба Freeradius (radiusd) не может запуститься при загрузке, но может быть запущена вручную.

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

Мне удалось установить сервер freeradius на Centos 7, используя скомпилированный исходный код по адресу ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.18.tar.gz

Все работает прекрасно, за исключением того, что служба не запускается автоматически после перезагрузки.
Мне приходится вводить команду…

sudo systemctl start radiusd

Служба запустилась успешно. Ниже приведены логи

● radiusd.service - Конфигурация FreeRADIUS от ME.
  Загружено: загружено (/usr/lib/systemd/system/radiusd.service; включено; предустановка поставщика: отключена)
  Активно: активно (работает) с Сб 2022-01-22 00:10:50 +08; 7с назад
  Процесс: 2036 ExecStart=/opt/freeradius/sbin/radiusd -d /opt/freeradius/etc/raddb (код=вышел, статус=0/УСПЕХ)
  Процесс: 2028 ExecStartPre=/opt/freeradius/sbin/radiusd (код=вышел, статус=0/УСПЕХ)
  Процесс: 2023 ExecStartPre=/opt/freeradius/sbin/radiusd -C (код=вышел, статус=0/УСПЕХ)
  Процесс: 2020 ExecStartPre=/bin/chown -R radiusd.radiusd /var/run/radiusd (код=вышел, статус=0/УСПЕХ)
  Основной PID: 2039 (radiusd)
  CGroup: /system.slice/radiusd.service
       └─2039 /opt/freeradius/sbin/radiusd -d /opt/freeradius/etc/raddb

Вот содержание моего systemd для radiusd.service

[Unit]
 Description=Конфигурация FreeRADIUS от ME.
 After=syslog.target network.target ipa.service dirsrv.target krb5kdc.service smb.service nmb.service

[Service]
 Type=forking
 #PIDFile=/var/run/radiusd/radiusd.pid

 ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
 ExecStartPre=/opt/freeradius/sbin/radiusd -C
 ExecStart=/opt/freeradius/sbin/radiusd -d /opt/freeradius/etc/raddb
 ExecReload=/opt/freeradius/sbin/radiusd
 ExecReload=/bin/kill -HUP $MAINPID

[Install]
 WantedBy=multi-user.target

Это системный лог после перезагрузки

● radiusd.service - Конфигурация FreeRADIUS от ME.
  Загружено: загружено (/usr/lib/systemd/system/radiusd.service; включено; предустановка поставщика: отключена)
  Активно: не удалось (Результат: код выхода) с Сб 2022-01-22 00:32:31 +08; 48с назад
  Процесс: 1320 ExecStartPre=/opt/freeradius/sbin/radiusd -C (код=вышел, статус=1/НЕУДАЧА)
  Процесс: 1284 ExecStartPre=/bin/chown -R radiusd.radiusd /var/run/radiusd (код=вышел, статус=0/УСПЕХ)

 Jan 22 00:32:22 myhost systemd[1]: Запуск конфигурации FreeRADIUS от ME....
 Jan 22 00:32:31 myhost systemd[1]: radiusd.service: управляющий процесс вышел, код=вышел статус=1
 Jan 22 00:32:31 myhost systemd[1]: Не удалось запустить конфигурацию FreeRADIUS от ME..
 Jan 22 00:32:31 myhost systemd[1]: Единица radiusd.service вошла в состояние ошибки.
 Jan 22 00:32:31 myhost systemd[1]: radiusd.service завершила работу с ошибкой.

Я просто не знаю, где еще искать, потому что это единственные логи, которые я нашел.

Из страницы man…

Сервер может вернуть нулевой код состояния, когда запущен с -C, но может при этом завершиться с ошибкой, когда запущен нормально.

Я думаю, что просто уберу ExecStartPre=/opt/freeradius/sbin/radiusd -C.

Если вы не вносили никаких изменений, то не будет смысла в проверке.

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

Когда вы сталкиваетесь с проблемой, когда служба FreeRADIUS не запускается при загрузке системы на CentOS 7, но успешно запускается вручную, есть несколько направлений, в которых стоит проводить анализ и искать решение. Давайте внимательно рассмотрим вашу конфигурацию и логи.

Описание проблемы

Вы настроили сервер FreeRADIUS, используя скомпилированный из исходников пакет на CentOS 7. Несмотря на то что служба успешно запускается вручную с помощью команды sudo systemctl start radiusd, она не запускается автоматически при перезагрузке, что вызывает затруднения в администрировании.

Логи и выводы

На основании предоставленных логов, после перезагрузки системы, служба FreeRADIUS завершает работу с ошибкой:

radiusd.service: control process exited, code=exited status=1

Это указывает на то, что один из процессов, запускаемых при старте службы, выходит с ненулевым статусом, что означает ошибку.

Анализ конфигурации radiusd.service

Ваш файл службы radiusd.service содержит следующие ключевые секции:

  1. Unit

    • Устанавливает зависимости и порядок запуска службы.
  2. Service

    • Определяет поведение службы, включая предшествующие команды (ExecStartPre и ExecStart).
    • Здесь можно видеть, что вы используете ExecStartPre=/opt/freeradius/sbin/radiusd -C, что запускает FreeRADIUS в режим проверки конфигурации. Несмотря на то что эта команда может завершаться с нулевым кодом, служба все равно может завершиться с ошибками, когда запускается в обычном режиме.

Рекомендации по решению проблемы

  1. Удаление ExecStartPre для проверки конфигурации
    Учитывая, что проверка конфигурации (-C) не нужна при каждом старте службы, вы можете попробовать удалить строку:

    ExecStartPre=/opt/freeradius/sbin/radiusd -C

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

  2. Проверка прав доступа к /var/run/radiusd
    Убедитесь, что директория /var/run/radiusd существует и имеет правильные права доступа. Команда chown выполняется успешно, но на всякий случай проверьте, что пользователь и группа radiusd имеют необходимые права.

    sudo mkdir -p /var/run/radiusd
    sudo chown radiusd:radiusd /var/run/radiusd
  3. Логи FreeRADIUS
    Проверьте логи FreeRADIUS, которые могут находиться в директории /var/log/radius/, или в другой конфигурации, чтобы увидеть более детальную информацию о причине сбоя. Вы можете использовать команду:

    tail -f /var/log/radius/radius.log
  4. Системные зависимости
    Убедитесь, что все системные зависимости, упомянутые в секции [Unit], загружаются корректно. Если какая-либо зависимость не загружена вовремя, это может вызвать сбой при запуске службы.

  5. Запуск в режиме отладки
    Вы можете запустить radiusd в режиме отладки, чтобы получить больше информации, запустив его вручную с параметрами, которые включают больше логов:

    sudo /opt/freeradius/sbin/radiusd -X

    Это даст вам полное представление о том, что происходит при запуске сервиса.

Заключение

Если следовать вышеприведенным рекомендациям, вы сможете устранить проблему со службой FreeRADIUS, которая не запускается при загрузке. Всегда следите за логами и правами доступа, так как большинство ошибок связано именно с ними. Не забудьте после внесения изменений перезагрузить службу:

sudo systemctl daemon-reload
sudo systemctl restart radiusd

Если проблема сохранится, предоставьте дополнительные логи для дальнейшего анализа.

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

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