Вопрос или проблема
Мне удалось установить сервер 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
содержит следующие ключевые секции:
-
Unit
- Устанавливает зависимости и порядок запуска службы.
-
Service
- Определяет поведение службы, включая предшествующие команды (ExecStartPre и ExecStart).
- Здесь можно видеть, что вы используете
ExecStartPre=/opt/freeradius/sbin/radiusd -C
, что запускает FreeRADIUS в режим проверки конфигурации. Несмотря на то что эта команда может завершаться с нулевым кодом, служба все равно может завершиться с ошибками, когда запускается в обычном режиме.
Рекомендации по решению проблемы
-
Удаление ExecStartPre для проверки конфигурации
Учитывая, что проверка конфигурации(-C)
не нужна при каждом старте службы, вы можете попробовать удалить строку:ExecStartPre=/opt/freeradius/sbin/radiusd -C
Это позволит избежать выполнения проверки, которая может привести к ошибкам.
-
Проверка прав доступа к /var/run/radiusd
Убедитесь, что директория/var/run/radiusd
существует и имеет правильные права доступа. Командаchown
выполняется успешно, но на всякий случай проверьте, что пользователь и группаradiusd
имеют необходимые права.sudo mkdir -p /var/run/radiusd sudo chown radiusd:radiusd /var/run/radiusd
-
Логи FreeRADIUS
Проверьте логи FreeRADIUS, которые могут находиться в директории/var/log/radius/
, или в другой конфигурации, чтобы увидеть более детальную информацию о причине сбоя. Вы можете использовать команду:tail -f /var/log/radius/radius.log
-
Системные зависимости
Убедитесь, что все системные зависимости, упомянутые в секции[Unit]
, загружаются корректно. Если какая-либо зависимость не загружена вовремя, это может вызвать сбой при запуске службы. -
Запуск в режиме отладки
Вы можете запуститьradiusd
в режиме отладки, чтобы получить больше информации, запустив его вручную с параметрами, которые включают больше логов:sudo /opt/freeradius/sbin/radiusd -X
Это даст вам полное представление о том, что происходит при запуске сервиса.
Заключение
Если следовать вышеприведенным рекомендациям, вы сможете устранить проблему со службой FreeRADIUS, которая не запускается при загрузке. Всегда следите за логами и правами доступа, так как большинство ошибок связано именно с ними. Не забудьте после внесения изменений перезагрузить службу:
sudo systemctl daemon-reload
sudo systemctl restart radiusd
Если проблема сохранится, предоставьте дополнительные логи для дальнейшего анализа.