5

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?

davidovv
  • 80
  • 1
  • 7

2 Answers2

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
  • i dont understand the $? part what is $? – davidovv Jan 22 '15 at 17:57
  • 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