Я пытаюсь удалить существующую запись зоны из файла named.conf привязки (в версии centos 7).
Запись зоны выглядит так:
zone "example.com" IN {
type master;
file "example.com.zone";
};
Команда:
sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf
удаляет эту запись (как предполагалось).
Затем я создал следующий сценарий оболочки (rm-zone.sh) с разрешениями исполняемого файла для выполнения той же работы:
#!/bin/sh
[ $# -lt 1 ] && {
echo "usage: $0 <domain>"
exit 1
}
domain=$1
sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf
rndc reload
echo Zone: $domain deleted successfully
Когда я вхожу в систему как root и запускаю команду:
./rm-zone.sh example.com
Я вижу сообщение «Зона example.com успешно удалена», но зона все еще находится в моем файле named.conf ...
Опять же, когда я даю вышеупомянутую команду из cli:
sed -nie '/\"example.com\"/,/^\};$/d;p;' /etc/named.conf
зона правильно удалена !!!
Видимо что-то не так в сценарии оболочки, но не удалось выяснить, что это ...
Будем очень признательны за любые идеи относительно того, что мне здесь не хватает!
Что касается реальной проблемы, которую вы решаете, я думаю, что, вероятно, стоит изучить rndc addzone
/rndc delzone
(в зависимости от allow-new-zones
вариант), чтобы разрешить автоматизацию добавления / удаления зон вместо изменения сценариями named.conf
сами.
Хотя я не уверен, что именно идет не так в вашем сценарии, то, как он написан, он просто пропустит и безоговорочно напечатает сообщение «успешно удалено» в конце, что бы ни случилось.
Возможно добавление set -ex
в начале сценария поможет устранить неполадки? (И -e
может вообще хорошая идея?)
Также может быть разумным сохранить какую-то резервную копию, к которой вы можете вернуться в случае сбоя, и, возможно, вызвать named-checkconf
чтобы убедиться, что новый файл кажется вменяемым?
Пытаться
sed -nie "/\"$domain\"/,/^\};"'$/d;p;' /etc/named.conf
вместо того
sed -nie '/\"$domain\"/,/^\};$/d;p;' /etc/named.conf
Одиночные кавычки отключают интерпретацию оболочки либо \|
или $domain
.