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