I have raspberry pi with raspbian. I would like to execute a script right after time gets synced with ntpd, my script needs correct datetime. How can i do that?
Asked
Active
Viewed 2,981 times
2 Answers
4
The proper way to do this is to use ntp-wait
. ntp-wait
was tailor made for this type of situation. Here is the man page:
ntp-wait(1) User Commands ntp-wait(1)
NAME
ntp-wait - Wait for ntpd to stabilize the system clock
SYNOPSIS
ntp-wait [-flag [value]]... [--opt-name [[=| ]value]]...
All arguments must be options.
DESCRIPTION
will send at most num-tries queries to sleeping for secs-between-
tries after each status return that says has not yet produced a syn‐
chronized and stable system clock.
will do this quietly, unless the v flag is provided.
OPTIONS
-n num-tries, --=num-tries
Number of times to check ntpd. This option takes an integer
number as its argument. The default num-tries for this option
is:
100
The maximum number of times we will check ntpd to see if it
has been able to synchronize and stabilize the system clock.
-s secs-between-tries, --=secs-between-tries
How long to sleep between tries. This option takes an integer
number as its argument. The default secs-between-tries for
this option is:
6
We will sleep for @file{secs-between-tries} after each query
of ntpd that returns "the time is not yet stable".
-v, -- Be verbose.
By default, ntp-wait is silent. With this option, ntp-wait
will provide status information.
-?, --help
Display usage information and exit.
-!, --more-help
Pass the extended usage information through a pager.
- [{v|c|n}], --version[={v|c|n}]
Output version of program and exit. The default mode is `v',
a simple version. The `c' mode will print copyright informa‐
tion and `n' will print the full copyright notice.
EXIT STATUS
One of the following exit values will be returned:
0 Successful program execution.
1 The operation failed or the command syntax was not valid.

dfc
- 792
- 5
- 16
-
I would like ntp-wait better if it had option like -n 0 (wait forever) For current option I have to write very big number (like estimate rest of my life :) and someone else who reads the code would be confused with big number and calculate secs*tries to se that it makes no sense... I would complain to tailor that the suit doesn't fit :) – davidovv Jan 22 '15 at 23:45
2
Asuming that you have a user that has permissions to call ntpdate ( in other words, who can adjust the system's time), you could use the following script, I am using in the example below the ntp server "0.ca.pool.ntp.org"
#!/bin/bash
NEEDS_SYNC=1
while [ "$NEEDS_SYNC" -ne "0" ]; do
ntpdate -t 4 0.ca.pool.ntp.org
NEEDS_SYNC=$? # If this variable is set ot 0, time sync worked
sleep 2
done
# RUN THE SCRIPT THT NEEDS ntp SYNC'D TIME HERE
Note that you might need to install the package 'ntpdate' for this to work.

Jorge Torres
- 1,426
- 12
- 21
-
-
sorry, it was hard to search for $? in google, but i finally figured it out, $? is command exit status – davidovv Jan 22 '15 at 18:09
-
I just saw your question, sorry. I am glad to hear you figured it out. Correct, $? holds the exit status of ntpdate, which only returns zero when the date is effectively set. – Jorge Torres Jan 22 '15 at 18:56