diff options
Diffstat (limited to 'projectroot/etc/init.d/chrony')
-rw-r--r-- | projectroot/etc/init.d/chrony | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/projectroot/etc/init.d/chrony b/projectroot/etc/init.d/chrony new file mode 100644 index 000000000..e7e937ae3 --- /dev/null +++ b/projectroot/etc/init.d/chrony @@ -0,0 +1,167 @@ +#!/bin/sh +# +# This is a chrony init.d script which ist called by init(1) +# with [start|stop] as argument. This version does not +# need an additional start-stop daemon. +# +# Last change: Bjørn Bürger <b.buerger@pengutronix.de> +# Date: Tue Mar 6 16:00:30 UTC 2007 + +PATH=/sbin:/bin:/usr/bin:/usr/sbin +BINARY="/usr/sbin/chronyd" +CONFIG="/etc/chrony/chrony.conf" +PREFIX="chrony: " +# This system doesn´t have full rtc ioctl support for +# chrony statistic functions +RTC_IOCTL="incomplete" + +# some chronyc commands need prior autentication: extract keys from config +KEY=$(awk '$1 ~ /^commandkey$/ { print $2; exit}' /etc/chrony/chrony.conf) +PASSWORD=`awk '$1 ~ /^'$KEY'$/ {print $2; exit}' /etc/chrony/chrony.keys` + +# convenience functions +message(){ + echo "${PREFIX}$*" >&2 +} + +message_n(){ + echo -n "${PREFIX}$*" >&2 +} + +bailout(){ + echo "${PREFIX}ERROR --- $*" >&2 + exit 1 +} + +usage(){ + echo "Usage: $0 {start|stop|restart|force-reload|online|offline|set-rtc|status|statistics}" +} + +killproc() { + killall $1 +} + +# main functions +start_proc() { + message_n "Reading system time from RealTimeClock ..." + /sbin/hwclock --hctosys || message_n " ### FAILED ### " + message "DONE" + message_n "Starting NTP server: chronyd ..." + [ -e "$CONFIG" ] || bailout "Configfile $CONFIG not found, PANIC!" + $BINARY -f $CONFIG + message "DONE" +} + +stop_proc() { + message_n "Stopping NTP server: chronyd ..." + killproc chronyd + message "DONE" + message_n "Writing system time to RealTimeClock ..." + /sbin/hwclock --systohc || message_n " ### FAILED ### " + message "DONE" +} + +set_online(){ + message_n "Setting NTP server ONLINE ... " + /bin/pidof chronyd > /dev/null || bailout " chronyd is not running " + /usr/bin/chronyc <<-EOF + password $PASSWORD + online + burst 5/10 + quit + EOF + message "DONE" + exit 0 +} + +set_offline(){ + message_n "Setting NTP server OFFLINE ... " + /bin/pidof chronyd > /dev/null || bailout " chronyd is not running " + /usr/bin/chronyc <<-EOF + password $PASSWORD + offline + EOF + message "DONE" + exit 0 +} + +set_rtc(){ + /bin/pidof chronyd > /dev/null || bailout " chronyd is not running " + if [ "$RTC_IOCTL" == "incomplete" ] ; then + # We are running on a system with limited rtc support, + # so we cannot let the ntp client do the job. + stop_proc + sleep 1 + start_proc + exit 0 + else + # This requires enhanced rtc support + message_n "Setting NTP time to RTC ... " + cat <<-EOF | /usr/bin/chronyc + password $PASSWORD + trimrtc + writertc + dump + EOF + message "DONE" + exit 0 + fi +} + +status(){ + /bin/pidof chronyd > /dev/null || bailout " chronyd is not running " + cat <<-EOF | /usr/bin/chronyc + password $PASSWORD + tracking + sources + EOF +} + +statistics(){ + /bin/pidof chronyd > /dev/null || bailout " chronyd is not running " + cat <<-EOF | /usr/bin/chronyc + password $PASSWORD + sourcestats + EOF +} + +case "$1" in + start) + start_proc + ;; + stop) + stop_proc + ;; + restart|force-reload) + message "Restarting NTP server: chronyd ... " + stop_proc + sleep 1 + start_proc + ;; + reload) + message "Reload is not supported" + exit 1 + ;; + online) + set_online + ;; + offline) + set_offline + ;; + set-rtc) + set_rtc + ;; + status) + status + ;; + statistics) + statistics + ;; + *) + usage + exit 1 + ;; +esac + +exit 0 + |