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

В проекте, над которым я работаю, мы генерируем файл dhcpd.conf через графический интерфейс. После создания файла dhcpd.conf я хочу убедиться, что нет синтаксических ошибок. Если есть ошибки, я хочу получить то, что они есть.

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

dhcpd -cf /path/to/dhcpd.conf

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


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

2 ответа

Решение

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

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

-t опция сделает проверку конфигурации:

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

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

/usr/sbin/dhcpd -t

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

Одна вещь, которой нет на странице руководства, и которая еще не описана здесь, состоит в том, что команда '/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 и т. Д.), Чтобы удалить строки заголовка (для имеющейся версии, все, вплоть до строки, начинающейся с "Для информации"), и строки трейлера (для версии, которая у меня есть, все после строки, в которой говорится "Обнаружены ошибки в файле конфигурации - выход"), в результате чего остается только синтаксическая ошибка и местоположение.

Другие вопросы по тегам