What you really want is ntpd
.
ntpdate
gets the (approximate) current time from one one single server and then moves the clock to that time. It's a one-shot update that is primarily useful for getting your server clock "into the right ballpark" at boot time, so that ntpd has less work to do in fine-tuning the clock.
ntpd
on the other hand, repeatedly polls the current time from a list of servers, taking into consideration factors such as network latency and jitter, and then builds a profile over time of each of the upstream servers to determine the correct time generally with a few milliseconds or better. Once it knows the correct time, it then slowly moves the system clock in that direction by adding or removing tiny fractions of a second for each clock tick, and finally stabilizes the local clock so that it won't drift anymore.
However, ntpd
won't move the clock if the time is off by too far of a margin. That's why you may want to run ntpdate
before ntpd
starts up. Note that ntpdate
won't function when ntpd
is running, which may be the problem you're running in to. ntpdate
should only be run at boot time before ntpd is started, and on some systems it's built-in to the ntpd startup script.