xref: /netbsd-src/external/bsd/ntp/dist/scripts/rc/ntpd (revision 8585484ef87f5a04d32332313cdb799625f4faf8)
1*8585484eSchristos#!/bin/sh
2*8585484eSchristos
3*8585484eSchristosNTPD=/usr/sbin/ntpd
4*8585484eSchristosPIDFILE=/var/run/ntpd.pid
5*8585484eSchristosUSER=ntp
6*8585484eSchristosGROUP=ntp
7*8585484eSchristosNTPD_OPTS="-g -u $USER:$GROUP -p $PIDFILE"
8*8585484eSchristos
9*8585484eSchristosntpd_start() {
10*8585484eSchristos    if [ -r $PIDFILE ]; then
11*8585484eSchristos        echo "ntpd seems to be already running under pid `cat $PIDFILE`."
12*8585484eSchristos        echo "Delete $PIDFILE if this is not the case.";
13*8585484eSchristos        return 1;
14*8585484eSchristos    fi
15*8585484eSchristos    echo -n "Starting NTP daemon... "
16*8585484eSchristos
17*8585484eSchristos    $NTPD $NTPD_OPTS
18*8585484eSchristos
19*8585484eSchristos    # You can't always rely on the ntpd exit code, see Bug #2420
20*8585484eSchristos    # case "$?" in
21*8585484eSchristos    #     0) echo "OK!"
22*8585484eSchristos    #         return 0;;
23*8585484eSchristos    #     *) echo "FAILED!"
24*8585484eSchristos    #         return 1;;
25*8585484eSchristos    # esac
26*8585484eSchristos
27*8585484eSchristos    sleep 1
28*8585484eSchristos
29*8585484eSchristos    if ps -Ao args|grep -q "^$NTPD $NTPD_OPTS"; then
30*8585484eSchristos        echo "OK!"
31*8585484eSchristos        return 0
32*8585484eSchristos    else
33*8585484eSchristos        echo "FAILED!"
34*8585484eSchristos        [ -e $PIDFILE ] && rm $PIDFILE
35*8585484eSchristos        return 1
36*8585484eSchristos    fi
37*8585484eSchristos}
38*8585484eSchristos
39*8585484eSchristosntpd_stop() {
40*8585484eSchristos    if [ ! -r $PIDFILE ]; then
41*8585484eSchristos        echo "ntpd doesn't seem to be running, cannot read the pid file."
42*8585484eSchristos        return 1;
43*8585484eSchristos    fi
44*8585484eSchristos    echo -n "Stopping NTP daemon...";
45*8585484eSchristos    PID=`cat $PIDFILE`
46*8585484eSchristos
47*8585484eSchristos    if kill -TERM $PID 2> /dev/null;then
48*8585484eSchristos        # Give ntp 15 seconds to exit
49*8585484eSchristos        for i in `seq 1 15`; do
50*8585484eSchristos            if [ -n "`ps -p $PID|grep -v PID`" ]; then
51*8585484eSchristos                echo -n .
52*8585484eSchristos                sleep 1
53*8585484eSchristos            else
54*8585484eSchristos                echo " OK!"
55*8585484eSchristos                rm $PIDFILE
56*8585484eSchristos                return 0
57*8585484eSchristos            fi
58*8585484eSchristos        done
59*8585484eSchristos    fi
60*8585484eSchristos
61*8585484eSchristos    echo " FAILED! ntpd is still running";
62*8585484eSchristos    return 1
63*8585484eSchristos}
64*8585484eSchristos
65*8585484eSchristosntpd_status() {
66*8585484eSchristos    if [ -r $PIDFILE ]; then
67*8585484eSchristos        echo "NTP daemon is running as `cat $PIDFILE`"
68*8585484eSchristos    else
69*8585484eSchristos        echo "NTP daemon is not running"
70*8585484eSchristos    fi
71*8585484eSchristos}
72*8585484eSchristos
73*8585484eSchristoscase "$1" in
74*8585484eSchristos    'start')
75*8585484eSchristos        ntpd_start
76*8585484eSchristos        ;;
77*8585484eSchristos    'stop')
78*8585484eSchristos        ntpd_stop
79*8585484eSchristos        ;;
80*8585484eSchristos    'restart')
81*8585484eSchristos        ntpd_stop && ntpd_start
82*8585484eSchristos        ;;
83*8585484eSchristos    'status')
84*8585484eSchristos        ntpd_status
85*8585484eSchristos        ;;
86*8585484eSchristos    *)
87*8585484eSchristos        echo "Usage: $0 (start|stop|restart|status)"
88*8585484eSchristosesac
89