ntpd: explain why scripts can be run in quick succession
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
3581c62515
commit
24928ffd8d
@ -1,10 +1,12 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
exec 2>/dev/null
|
# Note that there is no provision to prevent several copies of the script
|
||||||
echo "`tail -n 99 "$0.log"`" >"$0.log"
|
# to be run in quick succession. In fact, it happens rather often
|
||||||
|
# if initial syncronization results in a step.
|
||||||
exec >>"$0.log"
|
# You will see "step" and then "stratum" script runs, sometimes
|
||||||
exec 2>&1
|
# as close as only 0.002 seconds apart.
|
||||||
|
#
|
||||||
|
# Script should be ready to deal with this.
|
||||||
|
|
||||||
dt=`date '+%Y-%m-%d %H:%M:%S'`
|
dt=`date '+%Y-%m-%d %H:%M:%S'`
|
||||||
|
|
||||||
@ -13,17 +15,23 @@ if test x"$stratum" != x"" \
|
|||||||
&& test 4 -ge "$stratum" \
|
&& test 4 -ge "$stratum" \
|
||||||
&& test 128 -le "$poll_interval" \
|
&& test 128 -le "$poll_interval" \
|
||||||
; then
|
; then
|
||||||
|
echo "`tail -n 199 -- "$0.log" 2>/dev/null`" >"$0.log.$$"
|
||||||
echo "$dt: $1"\
|
echo "$dt: $1"\
|
||||||
"freq_drift_ppm=$freq_drift_ppm"\
|
"freq_drift_ppm=$freq_drift_ppm"\
|
||||||
"offset=$offset"\
|
"offset=$offset"\
|
||||||
"stratum=$stratum"\
|
"stratum=$stratum"\
|
||||||
"poll_interval=$poll_interval,"\
|
"poll_interval=$poll_interval,"\
|
||||||
"setting hardware clock"
|
"setting hardware clock"\
|
||||||
|
>>"$0.log.$$"
|
||||||
|
mv -- "$0.log.$$" "$0.log"
|
||||||
exec hwclock --systohc
|
exec hwclock --systohc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "`tail -n 199 -- "$0.log" 2>/dev/null`" >"$0.log.$$"
|
||||||
echo "$dt: $1"\
|
echo "$dt: $1"\
|
||||||
"freq_drift_ppm=$freq_drift_ppm"\
|
"freq_drift_ppm=$freq_drift_ppm"\
|
||||||
"offset=$offset"\
|
"offset=$offset"\
|
||||||
"stratum=$stratum"\
|
"stratum=$stratum"\
|
||||||
"poll_interval=$poll_interval"\
|
"poll_interval=$poll_interval"\
|
||||||
|
>>"$0.log.$$"
|
||||||
|
mv -- "$0.log.$$" "$0.log"
|
||||||
|
@ -735,6 +735,13 @@ send_query_to_peer(peer_t *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Note that there is no provision to prevent several run_scripts
|
||||||
|
* to be done 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.
|
||||||
|
*/
|
||||||
static void run_script(const char *action, double offset)
|
static void run_script(const char *action, double offset)
|
||||||
{
|
{
|
||||||
char *argv[3];
|
char *argv[3];
|
||||||
@ -1185,8 +1192,8 @@ update_local_clock(peer_t *p)
|
|||||||
abs_offset = fabs(offset);
|
abs_offset = fabs(offset);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* If needed, -S script can detect this by looking at $offset
|
/* If needed, -S script can do it by looking at $offset
|
||||||
* env var and kill parent */
|
* env var and killing parent */
|
||||||
/* If the offset is too large, give up and go home */
|
/* If the offset is too large, give up and go home */
|
||||||
if (abs_offset > PANIC_THRESHOLD) {
|
if (abs_offset > PANIC_THRESHOLD) {
|
||||||
bb_error_msg_and_die("offset %f far too big, exiting", offset);
|
bb_error_msg_and_die("offset %f far too big, exiting", offset);
|
||||||
@ -2007,7 +2014,7 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
nfds = poll(pfd, i, timeout * 1000);
|
nfds = poll(pfd, i, timeout * 1000);
|
||||||
gettime1900d(); /* sets G.cur_time */
|
gettime1900d(); /* sets G.cur_time */
|
||||||
if (nfds <= 0) {
|
if (nfds <= 0) {
|
||||||
if (G.cur_time - G.last_script_run > 11*60) {
|
if (G.script_name && G.cur_time - G.last_script_run > 11*60) {
|
||||||
/* Useful for updating battery-backed RTC and such */
|
/* Useful for updating battery-backed RTC and such */
|
||||||
run_script("periodic", G.last_update_offset);
|
run_script("periodic", G.last_update_offset);
|
||||||
gettime1900d(); /* sets G.cur_time */
|
gettime1900d(); /* sets G.cur_time */
|
||||||
|
Loading…
Reference in New Issue
Block a user