#!/bin/sh # Start/stop/restart the BIND name server daemon (named). # Start BIND. By default this will run with user "named". If you'd like to # change this or other options, see: /etc/default/named # You might also consider running BIND in a "chroot jail", # a discussion of which may be found in # /usr/doc/Linux-HOWTOs/Chroot-BIND-HOWTO. # One last note: rndc has a lot of other nice features that it is not # within the scope of this start/stop/restart script to support. # For more details, see "man rndc" or just type "rndc" to see the options. # Load command defaults: if [ -f /etc/default/named ] ; then . /etc/default/named ; fi if [ -f /etc/default/rndc ] ; then . /etc/default/rndc ; fi # In case /etc/default/named was missing, provide fallbacks: if [ -z "$NAMED_USER" ]; then NAMED_USER="named" fi if [ -z "$NAMED_GROUP" ]; then NAMED_GROUP="named" fi if [ -z "$NAMED_OPTIONS" ]; then NAMED_OPTIONS="-u $NAMED_USER" fi # Sanity check. If /usr/sbin/named is missing then it # doesn't make much sense to try to run this script: if [ ! -x /usr/sbin/named ]; then echo "/etc/rc.d/rc.bind: no /usr/sbin/named found (or not executable); cannot start." exit 1 fi # Start BIND. As many times as you like. ;-) # Seriously, don't run "rc.bind start" if BIND is already # running or you'll get more than one copy running. bind_start() { # Make sure /var/run/named exists: mkdir -p /var/run/named # Make sure that /var/run/named has correct ownership: chown -R ${NAMED_USER}:${NAMED_GROUP} /var/run/named if [ "$NAMED_CHOWN" = "YES" ]; then # Make sure that /var/named has correct ownership: chown -R ${NAMED_USER}:${NAMED_GROUP} /var/named if [ -r /etc/rndc.key ]; then # Make sure that /etc/rndc.key has correct ownership: chown ${NAMED_USER}:${NAMED_GROUP} /etc/rndc.key fi fi # Start named: if [ -x /usr/sbin/named ]; then echo "Starting BIND: /usr/sbin/named $NAMED_OPTIONS" /usr/sbin/named $NAMED_OPTIONS sleep 1 fi # Make sure that named started: if ! ps axc | grep -q named ; then echo "WARNING: named did not start." echo "Attempting to start named again: /usr/sbin/named $NAMED_OPTIONS" /usr/sbin/named $NAMED_OPTIONS sleep 1 if ps axc | grep -q named ; then echo "SUCCESS: named started." else echo "FAILED: Sorry, a second attempt to start named has also failed." echo "There may be a configuration error that needs fixing. Good luck!" fi fi } # Stop all running copies of BIND (/usr/sbin/named): bind_stop() { # If you've set up rndc, we can use this to make shutting down BIND faster. # If you have /etc/rndc.conf, or you have /etc/rndc.key, or $RNDC_OPTIONS is # not empty, we'll try it. if [ -r /etc/rndc.conf -o -r /etc/rndc.key -o ! -z "$RNDC_OPTIONS" ]; then if [ -z "$RNDC_OPTIONS" ]; then echo "Stopping BIND: /usr/sbin/rndc stop" else echo "Stopping BIND: /usr/sbin/rndc $RNDC_OPTIONS stop" fi /usr/sbin/rndc $RNDC_OPTIONS stop # Wait for up to $TIMEOUT seconds before moving on to try killall: TIMEOUT=${TIMEOUT:-10} while [ "$TIMEOUT" -gt "0" ]; do # Exit the timeout loop if there are no named processes: if ! ps axco command | grep -q -e "^named$"; then break fi sleep 1 TIMEOUT=$(expr $TIMEOUT - 1) done fi # Kill named processes if there are any running: if ps axco command | grep -q -e "^named$"; then echo "Stopping all named processes in this namespace: /bin/killall -SIGTERM --ns \$\$ named" /bin/killall -SIGTERM --ns $$ named 2> /dev/null fi } # Reload BIND: bind_reload() { /usr/sbin/rndc $RNDC_OPTIONS reload } # Restart BIND: bind_restart() { bind_stop bind_start } # Get BIND status: bind_status() { /usr/sbin/rndc $RNDC_OPTIONS status } case "$1" in 'start') bind_start ;; 'stop') bind_stop ;; 'reload') bind_reload ;; 'restart') bind_restart ;; 'status') bind_status ;; *) echo "usage $0 start|stop|reload|restart|status" esac