#!/bin/sh

NTPD=/usr/sbin/ntpd
PIDFILE=/var/run/ntpd.pid
USER=ntp
GROUP=ntp
NTPD_OPTS="-g -u $USER:$GROUP -p $PIDFILE"

ntpd_start() {
   if [ -r $PIDFILE ]; then
       echo "ntpd seems to be already running under pid `cat $PIDFILE`."
       echo "Delete $PIDFILE if this is not the case.";
       return 1;
   fi
   echo -n "Starting NTP daemon... "

   $NTPD $NTPD_OPTS

   # You can't always rely on the ntpd exit code, see Bug #2420
   # case "$?" in
   #     0) echo "OK!"
   #         return 0;;
   #     *) echo "FAILED!"
   #         return 1;;
   # esac

   sleep 1

   if ps -Ao args|grep -q "^$NTPD $NTPD_OPTS"; then
       echo "OK!"
       return 0
   else
       echo "FAILED!"
       [ -e $PIDFILE ] && rm $PIDFILE
       return 1
   fi
}

ntpd_stop() {
   if [ ! -r $PIDFILE ]; then
       echo "ntpd doesn't seem to be running, cannot read the pid file."
       return 1;
   fi
   echo -n "Stopping NTP daemon...";
   PID=`cat $PIDFILE`

   if kill -TERM $PID 2> /dev/null;then
       # Give ntp 15 seconds to exit
       for i in `seq 1 15`; do
           if [ -n "`ps -p $PID|grep -v PID`" ]; then
               echo -n .
               sleep 1
           else
               echo " OK!"
               rm $PIDFILE
               return 0
           fi
       done
   fi

   echo " FAILED! ntpd is still running";
   return 1
}

ntpd_status() {
   if [ -r $PIDFILE ]; then
       echo "NTP daemon is running as `cat $PIDFILE`"
   else
       echo "NTP daemon is not running"
   fi
}

case "$1" in
   'start')
       ntpd_start
       ;;
   'stop')
       ntpd_stop
       ;;
   'restart')
       ntpd_stop && ntpd_start
       ;;
   'status')
       ntpd_status
       ;;
   *)
       echo "Usage: $0 (start|stop|restart|status)"
esac