| #!/bin/sh |
| # Note that there is no provision to prevent several copies of the script |
| # to be run in quick succession. In fact, it happens rather often |
| # if initial syncronization results in a step. |
| # You will see "step" and then "stratum" script runs, sometimes |
| # as close as only 0.002 seconds apart. |
| # |
| # Script should be ready to deal with this. |
| |
| # For other parts of the system which prefer to run only on the stable clock |
| echo "$1" >rundir/sync_status |
| |
| dt=`date '+%Y-%m-%d %H:%M:%S'` |
| |
| echo "`tail -n 199 -- "$0.log" 2>/dev/null`" >"$0.log.$$" |
| |
| if test x"$1" = x"unsync" \ |
| ; then |
| # No replies for our NTP requests were seen for some time. |
| # |
| # Among more mundate cases like network outages, this happens |
| # if we ran for a LONG time (days) and ntp server's IP has changed. |
| # ntpd has no code to re-resolve peers' addresses to IPs, |
| # we need to help it: |
| # |
| echo "$dt: $1"\ |
| "syncronization lost, restarting ntpd"\ |
| >>"$0.log.$$" |
| mv -- "$0.log.$$" "$0.log" |
| kill $PPID |
| exit |
| fi |
| |
| if test x"$stratum" != x"" \ |
| && test x"$poll_interval" != x"" \ |
| && test 4 -ge "$stratum" \ |
| && test 128 -le "$poll_interval" \ |
| ; then |
| echo "$dt: $1"\ |
| "freq_drift_ppm=$freq_drift_ppm"\ |
| "offset=$offset"\ |
| "stratum=$stratum"\ |
| "poll_interval=$poll_interval,"\ |
| "setting hardware clock"\ |
| >>"$0.log.$$" |
| mv -- "$0.log.$$" "$0.log" |
| exec hwclock --systohc |
| fi |
| |
| echo "$dt: $1"\ |
| "freq_drift_ppm=$freq_drift_ppm"\ |
| "offset=$offset"\ |
| "stratum=$stratum"\ |
| "poll_interval=$poll_interval"\ |
| >>"$0.log.$$" |
| mv -- "$0.log.$$" "$0.log" |