#!/bin/bash export BINARY="/usr/bin/dnscache" export CONFIG="/etc/dnscache" export PIDFILE="/var/run/dnscache.pid" export LOGFILE="/var/log/dnscache" depend() { need net provide dns } start() { echo "Starting DNS cache ... " # vars export SEED="${CONFIG}/seed" export ENVDIR="${CONFIG}/env" # check config dir echo "Checking for config dir ${CONFIG} ..." if [ ! -d "${CONFIG}" ]; then echo "Config dir ${CONFIG} not found." exit 1 fi # check for another server echo "Checking pidfile ${PIDFILE} ..." if [ -r "${PIDFILE}" ]; then kill -0 `cat "${PIDFILE}"` &>/dev/null if [ $? -eq 0 ]; then echo "Already running (pid=`cat \"${PIDFILE}\"`)." exit 1 else echo "Stale pid file, erasing..." rm -f "${PIDFILE}" fi fi echo "Setting up logfile ${LOGFILE} ..." # set up log if [ "${LOGFILE}" != "/dev/null" ]; then rm -f "${LOGFILE}" touch "${LOGFILE}" fi ## generate random seed rm -f "$SEED" touch "$SEED" chmod 400 "$SEED" dd if=/dev/urandom of="$SEED" bs=128 count=1 2>/dev/null # record time echo "--- START: `date`" >> "$LOGFILE" # start the server exec 2>&1 exec < "$SEED" exec envdir "$ENVDIR" sh -c ' exec envuidgid dnscache softlimit -o250 -d "$DATALIMIT" "$BINARY" ' 1 >> "$LOGFILE" 2>&1 & echo $! > "$PIDFILE" echo $? } stop() { echo "Stopping DNS cache... " kill `cat "$PIDFILE"` if [ $? -eq 0 ]; then rm -f "$PIDFILE" echo OK else echo FAILED fi echo $? } restart() { stop sleep 1 start } case $1 in start) start ;; stop) stop ;; restart) restart ;; esac