1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: bind bind9
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Should-Start: $network $syslog
# Should-Stop: $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop BIND 9 Domain Name Server
# Description: BIND 9 is a Domain Name Server (DNS)
# which translates ip addresses to and from internet names
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# for a chrooted server: "-u bind -t /var/lib/named"
# Don't modify this line, instead change or create /etc/default/named.
OPTIONS=""
RESOLVCONF=no
test -f /etc/default/named && . /etc/default/named
test -x /usr/sbin/rndc || exit 0
. /lib/lsb/init-functions
PIDFILE=/run/named/named.pid
check_network() {
result=0
if [ -x /usr/bin/uname ] && [ "X$(/usr/bin/uname -o)" = XSolaris ]; then
LIST_NICS_IP=$(ifconfig -au) || result=$?
else
LIST_NICS_IP=$(ip addr) || result=$?
fi
if [ $result -ne 0 ] || [ -z "${LIST_NICS_IP}" ]; then
#log_action_msg "No networks configured."
return 1
fi
return 0
}
case "$1" in
start)
log_daemon_msg "Starting domain name service..." "named"
modprobe capability >/dev/null 2>&1 || true
# dirs under /run can go away on reboots.
mkdir -p /run/named
chmod 775 /run/named
chown root:bind /run/named >/dev/null 2>&1 || true
if [ ! -x /usr/sbin/named ]; then
log_action_msg "named binary missing - not starting"
log_end_msg 1
fi
if ! check_network; then
log_action_msg "no networks configured"
log_end_msg 1
fi
if start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/named \
--pidfile ${PIDFILE} -- $OPTIONS; then
if [ "X$RESOLVCONF" != "Xno" ] && command -v resolvconf >/dev/null; then
echo "nameserver 127.0.0.1" | resolvconf -a lo.named
fi
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
log_daemon_msg "Stopping domain name service..." "named"
if ! check_network; then
log_action_msg "no networks configured"
log_end_msg 1
fi
if [ "X$RESOLVCONF" != "Xno" ] && command -v resolvconf >/dev/null; then
resolvconf -d lo.named
fi
pid=$(/usr/sbin/rndc stop -p | awk '/^pid:/ {print $2}') || true
if [ -z "$pid" ]; then # no pid found, so either not running, or error
pid=$(pgrep -f ^/usr/sbin/named) || true
start-stop-daemon --stop --oknodo --quiet --exec /usr/sbin/named \
--pidfile ${PIDFILE} -- $OPTIONS
fi
if [ -n "$pid" ]; then
sig=0
n=1
while kill -$sig "$pid" 2>/dev/null; do
if [ $n -eq 1 ]; then
echo "waiting for pid $pid to die"
fi
if [ $n -eq 11 ]; then
echo "giving up on pid $pid with kill -0; trying -9"
sig=9
fi
if [ $n -gt 20 ]; then
echo "giving up on pid $pid"
break
fi
n=$((n + 1))
sleep 1
done
fi
log_end_msg 0
;;
reload | force-reload)
log_daemon_msg "Reloading domain name service..." "named"
if ! check_network; then
log_action_msg "no networks configured"
log_end_msg 1
fi
if /usr/sbin/rndc reload >/dev/null; then
log_end_msg 0
else
log_end_msg 1
fi
;;
restart)
if ! check_network; then
log_action_msg "no networks configured"
exit 1
fi
$0 stop
$0 start
;;
status)
ret=0
status_of_proc -p ${PIDFILE} /usr/sbin/named bind 2>/dev/null || ret=$?
exit $ret
;;
*)
log_action_msg "Usage: /etc/init.d/named {start|stop|reload|restart|force-reload|status}"
exit 1
;;
esac
exit 0
|