Подтвердить что ты не робот

Как проверить dhcpd.conf на синтаксическую ошибку без запуска dhcpd?

Мне нужно убедиться, что на dhcpd.conf нет синтаксических ошибок. Если есть ошибки, я хочу получить то, что они есть.

Я могу проверить синтаксические ошибки с помощью этой команды:

dhcpd -cf /path/to/dhcpd.conf

но это печатает много информации в дополнение к ошибке, которую я получил. Другое дело, что я не хочу запускать dhcpd, даже если нет синтаксической ошибки. Я только хочу проверить синтаксические ошибки и посмотреть, что они есть.


К сожалению, запуск dhcpd -tf/path/to/dhcpd.conf также не решил мою проблему.

4b9b3361

Ответ 1

Синтаксис, который вы ищете, это

dhcpd -t -cf /path/to/dhcpd.conf

Параметр -t выполнит проверку конфигурации:

Если указан флаг -t, сервер просто проверит файл конфигурации для правильного синтаксиса, но не будет пытаться выполнять какие-либо сетевые операции. Это можно использовать для автоматического тестирования нового файла конфигурации перед его установкой.

Вам не нужно использовать -cf, если вы используете путь к файлу по умолчанию.

/usr/sbin/dhcpd -t

Тот, который вы пробовали с помощью -tf /path/to/..., совсем другой и относится к трассировке.

Ответ 2

Единственное, чего нет на странице руководства, и которое здесь еще не освещено, это то, что команда /usr/sbin/dhcpd -t использует возвращаемое значение, чтобы указать, правильна ли конфигурация или нет.

Если ошибок нет, возвращается ноль. если есть синтаксические ошибки, он вернет ненулевое значение (1 для теста, который я сделал)

Таким образом, вы можете использовать что-то вроде:

/usr/sbin/dhcpd -t
if [ $? -ne 0 ]; then
  echo "Configuration has errors, aborting"
fi
/bin/systemctl restart isc-dhcp-server

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

К сожалению, я не думаю, что есть какая-либо возможность просто отобразить ошибки. Можно было бы использовать инструмент синтаксического анализа текста (awk, python и т.д.), Чтобы удалить строки заголовка (для имеющейся версии, все, вплоть до строки, начинающейся с "Для информации"), и строки трейлера (для версии, которая у меня есть, все после строки, в которой говорится "Обнаружены ошибки в файле конфигурации - выход"), в результате чего остается только синтаксическая ошибка и местоположение.