This page describes methods for keeping your computer's time accurate. This is useful for servers, but is not necessary (or desirable) for desktop machines.
NTP is a TCP/IP protocol for synchronising time over a network. Basically a client requests the current time from a server, and uses it to set its own clock.
Behind this simple description, there is a lot of complexity - there are tiers of NTP servers, with the tier one NTP servers connected to atomic clocks (often via GPS), and tier two and three servers spreading the load of actually handling requests across the Internet. Also the client software is a lot more complex than you might think - it has to factor out communication delays, and adjust the time in a way that does not upset all the other processes that run on the server. But luckily all that complexity is hidden from you!
Ubuntu has two ways of automatically setting your time: ntpdate and ntpd.
Ubuntu comes with ntpdate as standard, and will run it once at boot time to set up your time according to Ubuntu's NTP server. However, a server's clock is likely to drift considerably between reboots, so it makes sense to correct the time occasionally. The easiest way to do this is to get cron to run ntpdate every day. With your favorite editor, as root, create a file
/etc/cron.daily/ntpdate
containing:
ntpdate ntp.ubuntu.com
The file /etc/cron.daily/ntpdate
must also be executable.
sudo chmod 755 /etc/cron.daily/ntpdate
ntpdate is a bit of a blunt instrument - it can only adjust the time once a day, in one big correction. The ntp daemon ntpd is far more subtle. It calculates the drift of your system clock and continuously adjusts it, so there are no large corrections that could lead to inconsistent logs for instance. The cost is a little processing power and memory, but for a modern server this is negligible.
To set up ntpd:
sudo apt-get install ntp
In both cases above, your system will use Ubuntu's NTP server at
ntp.ubuntu.com
by default. This is OK, but you might want to use several servers to increase accuracy and resilience, and you may want to use time servers that are geographically closer to you. to do this for ntpdate, change the contents of
/etc/cron.daily/ntpdate
to:
ntpdate ntp.ubuntu.com pool.ntp.org
And for ntpd edit
/etc/ntp.conf
to include additional server lines:
server ntp.ubuntu.com server pool.ntp.org
You may notice
pool.ntp.org
in the examples above. This is a really good idea which uses round-robin DNS to return an NTP server from a pool, spreading the load between several different servers. Even better, they have pools for different regions - for instance, if you are in New Zealand, so you could use
nz.pool.ntp.org
instead of
pool.ntp.org
. Look at
http://www.pool.ntp.org/
for more details.
You can also Google for NTP servers in your region, and add these to your configuration. To test that a server works, just type
sudo ntpdate ntp.server.name
and see what happens.