Handle an interesting corner case when NTP server is reachable... but on a different IP now. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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.
 | 
						|
 | 
						|
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"
 |