#!/bin/sh # Primary sends files in $DIR. export PATH=/bin:/sbin:/usr/bin:/usr/sbin DIR="/var/powerdns/" local_update() { echo "update domain $1" pdns_control bind-reload-now $1 | grep "no such domain" # In case the update cannot be done, it might be because the zone wasn't loaded at all. if [ $? -eq 0 ]; then pdns_control bind-add-zone $1 $DIR/$1 fi } local_delete() { echo "TODO: delete domain $1" ; } action() { event=$1 file=$2 echo $event | grep "CLOSE_WRITE" >/dev/null if [ $? -eq 0 ]; then echo "$file has been modified" local_update $file fi echo $event | grep "DELETE" >/dev/null if [ $? -eq 0 ]; then echo "$file has been deleted" local_delete $file fi } # NOTE: primary nameserver sends files in $DIR upon modification or remove them # # Therefore, the different interesting actions we should monitor are: # - close_write: a zone file has been modified # - delete: a domain has been removed opts="-e close_write -e delete -m" echo "inotifywait ${opts} --format '%:e %f' $DIR" inotifywait ${opts} --format '%:e %f' $DIR | while read LINE; do action $LINE ; done