svn commit: r187782 - in head: etc/rc.d share/man/man5

Giorgos Keramidas keramida at freebsd.org
Wed Jan 28 22:41:14 PST 2009


On Thu, 29 Jan 2009 13:28:39 +0800, Rong-en Fan <grafan at gmail.com> wrote:
>>> Shouldn't we keep ntp running after the clock is adjusted?
>>
>> This is correct too.  The effect of `ntpd_sync_on_start' is supposed to
>> be the same as if we run `ntpdate' before the real ntpd starts, so this
>> option only applies to the first sync-once instance of ntpd.  The real
>> ntpd starts later, and finds the clock pre-synced.
>
> Hmm... I think I'm confused. According to rc.d/ntpd, if ntpd_sync_on_start
> is set to yes, it adds '-q -g' to rc_flags. By doing so, ntpd start makes
> ntpd exists immediately after the first sync. Then, who is responsible
> to start the "real ntpd" you said above?

Oops, testing with ntpd_sync_on_start again I think I broke rc.d/ntpd.

I thought precmd was run in _addition_ to the start rc command, but it
only runs before it and affects the flags of start too.  I think I'll
back out the change until we the sync on start for real.

The folowing seems to work much better, but it shows a duplicate message
about `Starting ntpd.' so I have reverted the broken change until I've
worked through the patch a bit more:

%%%
diff -r 0c625c73ecc0 etc/rc.d/ntpd
--- a/etc/rc.d/ntpd	Wed Jan 28 18:38:39 2009 +0200
+++ b/etc/rc.d/ntpd	Thu Jan 29 08:40:43 2009 +0200
@@ -8,29 +8,48 @@
 # BEFORE:  LOGIN
 # KEYWORD: nojail shutdown
 
 . /etc/rc.subr
 
 name=ntpd
 rcvar=`set_rcvar`
 command="/usr/sbin/${name}"
 pidfile="/var/run/${name}.pid"
 start_precmd="ntpd_precmd"
+sync_cmd="ntpd_sync"
+extra_commands="sync"
 
 load_rc_config $name
 
+ntpd_sync()
+{
+	rc_flags="-c ${ntpd_config} ${ntpd_flags}"
+
+	# Emulate ntpdate by running once and disabling threshold checks.
+	local _rc_flags_save="${rc_flags}"
+	local _sync_on_start="${ntpd_sync_on_start}"
+
+	rc_flags="-q -g $rc_flags"
+	ntpd_sync_on_start="NO"			# Avoid recursion in the next `start'
+
+	run_rc_command start
+
+	rc_flags="${_rc_flags_save}"
+	ntpd_sync_on_start="${_sync_on_start}"
+}
+
 ntpd_precmd()
 {
 	rc_flags="-c ${ntpd_config} ${ntpd_flags}"
 
 	if checkyesno ntpd_sync_on_start; then
-		rc_flags="-q -g $rc_flags"
+		run_rc_command sync
 	fi
 
 	if [ -z "$ntpd_chrootdir" ]; then
 		return 0;
 	fi
 
 	# If running in a chroot cage, ensure that the appropriate files
 	# exist inside the cage, as well as helper symlinks into the cage
 	# from outside.
 	#
%%%


More information about the svn-src-all mailing list