Как проверить dhcpd.conf на синтаксическую ошибку без запуска dhcpd?
Мне нужно убедиться, что на dhcpd.conf нет синтаксических ошибок. Если есть ошибки, я хочу получить то, что они есть.
Я могу проверить синтаксические ошибки с помощью этой команды:
dhcpd -cf /path/to/dhcpd.conf
но это печатает много информации в дополнение к ошибке, которую я получил. Другое дело, что я не хочу запускать dhcpd, даже если нет синтаксической ошибки. Я только хочу проверить синтаксические ошибки и посмотреть, что они есть.
К сожалению, запуск dhcpd -tf/path/to/dhcpd.conf
также не решил мою проблему.
Ответы
Ответ 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 и т.д.), Чтобы удалить строки заголовка (для имеющейся версии, все, вплоть до строки, начинающейся с "Для информации"), и строки трейлера (для версии, которая у меня есть, все после строки, в которой говорится "Обнаружены ошибки в файле конфигурации - выход"), в результате чего остается только синтаксическая ошибка и местоположение.