How to know during system start when system time becomes correct from NTP
Every time you reboot your Pi (which takes more than a few seconds), your clock is going to be off for more than what ntp
can compensate for by stretching/shortening time (ie. slewing, which only good for correcting a clock that is only slightly off, such as caused by a real time clock being slow or fast by a second or so a day), ntp
has to set the clock.
So what might be the easiest is to have a script that starts your temperature measuring program first call ntpdate
or equivalent, which sets the date or slews according to how far of the retrieved value is. ntpdate
therefore doesn't disrupt things if the clock is already set close to correct by ntp
e.g. if you restart via this script without having had a reboot.
Provided you are using ntpd
(from the ntpd
package) to keep your clock in sync, it can be configured to step the clock on boot regardless of the time offset. If you're using some other package please advise in your Question.
By default ntpd
would only jump the clock if it was less than 1000 seconds, but Debian's implementation provides the -g
flag to override the limitation and allow stepping from any offset. (This is good.)
Also, the -x
flag will force slewing of the time rather than stepping for intervals of up to 600 seconds; you do not want this set. (The Debian default does not set this flag, which is good.)
Check /etc/default/ntp
, which should have just this line setting the flags:
NTPD_OPTS='-g'
Your question has been updated to explain that the logging process starts before time has synchronised, so I would suggest you use ntpstat
to identify when the synchronisation is complete.
Unsynchronised
ntpstat; printf "\nexit status %s\n" $?
unsynchronised
polling server every 8 s
exit status 1
Synchronised
ntpstat; printf "\nexit status %s\n" $?
synchronised to NTP server (203.0.113.22) at stratum 3
time correct to within 93 ms
polling server every 1024 s
exit status 0
Busy loop example
until ntpstat; do echo waiting; sleep 30; done; date
If you don't have ntpstat
and can't install it, you could probably get some information from ntpq -c sysinfo
ntpq -c sysinfo
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
system peer: server2.contoso.com:123
system peer mode: client
leap indicator: 00
stratum: 3
log2 precision: -20
root delay: 26.453
root dispersion: 28.756
reference ID: 203.0.113.22
reference time: e08863a7.fb7d83bf Thu, May 16 2019 23:33:11.982
system jitter: 3.227792
clock jitter: 1.178
clock wander: 0.012
broadcast delay: -50.000
symm. auth. delay: 0.000
Another option may be to parse the output of ntpq -c peers
to watch for the stratum to move away from 16.