我創建了一個bash腳本來在我的主DNS服務器和次DNS服務器之間傳輸我的區域。 它從主服務器下載我的區域列表並檢查任何新區域,然後下載並將這些區域文件插入到區域目錄和.local文件中以進行綁定。Bind9 DNS區域傳輸腳本 - 避免重複的Bash腳本
我遇到的問題是,如果區域文件不存在,則無論此配置是否已存在,腳本都會將詳細信息輸入到.local中。
有人可以幫助我區分已存在的區域並簡單地下載區域文件。 我在下面粘貼了我的腳本,如果有人對它的工作方式有任何疑問,請隨時詢問。 (有人可以包住代碼請,它從來沒有正常工作,我在任何瀏覽器我試試!)
#!/bin/sh
NAMED="/etc/bind/named.conf.local"
TMPNAMED="/tmp/zns-441245.temp"
TMPZONEFILE="/tmp/zones.txt"
TMP="/tmp/zns-732.temp"
ZONELOCATION="/var/cache/bind"
IGNORE=`cat ignore.txt`
logger DNS Update script running...
echo -n "Checking for new named.conf... "
wget -q http://91.121.75.205:10801/named/named.conf -O $TMPNAMED
if [ -e $TMPNAMED ]
then
echo "done."
else
echo "no new data!"
exit
fi
echo -n "Generating zone names... "
grep "^zone" $TMPNAMED | cut -d " " -f "2" | cut -d "\"" -f 2 > $TMPZONEFILE
sed '1,5d' $TMPZONEFILE > $TMP
mv $TMP $TMPZONEFILE
echo "done. ("$TMPZONEFILE")"
echo "Generating zone info... "
grep -vf ignore.txt $TMPZONEFILE | while read ZONE; do
echo -n "Checking for $ZONELOCATION/$ZONE.db "
if [ -e $ZONELOCATION/$ZONE.db ]
then
echo "[ exists ]"
else
export updates="yes"
echo "[ doesn't exist ]"
echo "New zone available ($ZONE)... "
echo "zone \"$ZONE\" {
type slave;
file \"$ZONELOCATION/$ZONE.db\";
masters { 91.121.75.205; };
allow-notify { 91.121.75.205; };
};" >> $NAMED
fi
done
echo "Updating Bind configuration... "
/etc/init.d/bind9 restart
rm $TMPZONEFILE
rm $TMPNAMED
你的問題被標記爲'[bash]'但你的shebang說'#!/ bin/sh'。這是什麼? – 2010-09-20 15:33:40