TIP 1: Is NTP Working?
STEP 1 (Test the current server): Try issuing the following command: $ ntpq -pn remote refid st t when poll reach delay offset jitter =================================================== tock.usno.navy 0.0.0.0 16 u - 64 0 0.000 0.000 4000.00 The above is an example of a problem. Compare it to a working configuration. $ ntpq -pn remote refid st t when poll reach delay offset jitter ======================================================== +128.4.40.12 128.4.40.10 2 u 107 128 377 25.642 3.350 1.012 127.127.1.0 127.127.1.0 10 l 40 64 377 0.000 0.000 0.008 +128.91.2.13 128.4.40.12 3 u 34 128 377 21.138 6.118 0.398 *192.5.41.41 .USNO. 1 u 110 128 377 33.69 9.533 3.534 STEP 2 (Configure the /etc/ntp.conf): $ cat /etc/ntp.conf # My simple client-only ntp configuration. server timeserver1.upenn.edu # ping -a timeserver1.upenn.edu shows the IP address 128.91.2.13 # which is used in the restrict below restrict 128.91.2.13 server tock.usno.navy.mil restrict 192.5.41.41 server 128.4.40.12 restrict 128.4.40.12 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 driftfile /etc/ntp/drift restrict default ignore restrict 127.0.0.0 mask 255.0.0.0 authenticate no STEP 3 (Configure /etc/ntp/step-tickers): The values for server above are placed in the "/etc/ntp/step-tickers" file $ cat /etc/ntp/step-tickers timeserver1.upenn.edu tock.usno.navy.mil 128.4.40.12 The startup script /etc/rc.d/init.d/ntpd will grab the servers in this file and execute the ntpdate command as follows: /usr/sbin/ntpdate -s -b -p 8 timeserver1.upenn.edu Why? Because if the time is off ntpd will not start. The command above set the clock. If System Time deviates from true time by more than 1000 seconds, then, the ntpd daemon will enter panic mode and exit. STEP 4 (Restart the service and check): Issue the restart command /etc/init.d/ntpd restart check the values for "ntpq -pn", which should match step 1. ntpq -pn SPECIAL NOTE: Time is always stored in the kernel as the number of seconds since midnight of the 1st of January 1970 UTC, regardless of whether the hardware clock is stored as UTC or not. Conversions to local time are done at run-time. So, it's easy to get the time in different timezones for only the current session as follows: $ export TZ=EST $ date Mon Aug 2 10:34:04 EST 2004 $ export TZ=NET $ date Mon Aug 2 15:34:18 NET 2004 The following are possible values for TZ: Hours From Greenwich Mean Time (GMT) Value Description 0 GMT Greenwich Mean Time +1 ECT European Central Time +2 EET European Eastern Time +2 ART +3 EAT Saudi Arabia +3.5 MET Iran +4 NET +5 PLT West Asia +5.5 IST India +6 BST Central Asia +7 VST Bangkok +8 CTT China +9 JST Japan +9.5 ACT Central Australia +10 AET Eastern Australia +11 SST Central Pacific +12 NST New Zealand -11 MIT Samoa -10 HST Hawaii -9 AST Alaska -8 PST Pacific Standard Time -7 PNT Arizona -7 MST Mountain Standard Time -6 CST Central Standard Time -5 EST Eastern Standard Time -5 IET Indiana East -4 PRT Atlantic Standard Time -3.5 CNT Newfoundland -3 AGT Eastern South America -3 BET Eastern South America -1 CAT Azores DST timezone 0 BST for British Summer. +400 ADT for Atlantic Daylight. +500 EDT for Eastern Daylight. +600 CDT for Central Daylight. +700 MDT for Mountain Daylight. +800 PDT for Pacific Daylight. +900 YDT for Yukon Daylight. +1000 HDT for Hawaii Daylight. -100 MEST for Middle European Summer, MESZ for Middle European Summer, SST for Swedish Summer and FST for French Summer. -700 WADT for West Australian Daylight. -1000 EADT for Eastern Australian Daylight. -1200 NZDT for New Zealand Daylight. The following is an example of setting the TZ environment variable for the timezone, only when timezone changes go into effect. $ export TZ=EST+5EDT,M4.1.0/2,M10.5.0/2 Take a look at the last line "M10.5.0/2". What does it mean? Here is the documentation Mm.w.d This specifies day d (0 <= d <= 6) of week w (1 <= w <= 5) of month m (1 <= m <= 12). Week 1 is the first week in which day d occurs and week 5 is the last week in which day d occurs. Day 0 is a Sunday. The time fields specify when, in the local time currently in effect, the change to the other time occurs. If omitted, the default is 02:00:00. So this is what it means. M10 stands for October, the 5 is the fifth week that includes a Sunday (note 0 in M10.5.0/2 is Sunday). To see that it is the fifth week see the calendar below. The time change occurs a 2am in the morning. (Special Note: In 2007, DST was extended. See TIP 230). October Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Prove it. Take the following program sunrise, which can calcuates sunrise and sunset for an latitude and longitude. This program can be downloaded from the following location: http://sourceforge.net/direct-dl/mchirico/souptonuts/working_with_time.t\ ar.gz Below is a bash script that will run the program for the next 100 days. #!/bin/bash # program: next100days Mike Chirico # download: # http://sourceforge.net/direct-dl/mchirico/souptonuts/working_with_time.t\ ar.gz # # This will calculate the sunrise and sunset for # latitude 39.95 Note must convert to degrees # longitude 75.15 Note must convert to degrees lat=39.95 long=75.15 for (( i=0; i <= 100; i++)) do sunrise `date -d "+$i day" "+%Y %m %d"` $lat $long done Take a look at the following sample output. $ export TZ=EST+5EDT,M4.1.0/2,M10.5.0/2 $ ./next100days Sunrise 08-24-2004 06:21:12 Sunset 08-24-2004 19:43:42 Sunrise 08-25-2004 06:22:09 Sunset 08-25-2004 19:42:12 Sunrise 08-26-2004 06:23:06 Sunset 08-26-2004 19:40:41 Sunrise 08-27-2004 06:24:03 Sunset 08-27-2004 19:39:09 Sunrise 08-28-2004 06:25:00 Sunset 08-28-2004 19:37:37 Sunrise 08-29-2004 06:25:56 Sunset 08-29-2004 19:36:04 Sunrise 08-30-2004 06:26:53 Sunset 08-30-2004 19:34:31 Sunrise 08-31-2004 06:27:50 Sunset 08-31-2004 19:32:57 Sunrise 09-01-2004 06:28:46 Sunset 09-01-2004 19:31:22 Sunrise 09-02-2004 06:29:43 Sunset 09-02-2004 19:29:47 ..[values omitted ] Sunrise 10-28-2004 07:25:31 Sunset 10-28-2004 18:02:34 Sunrise 10-29-2004 07:26:38 Sunset 10-29-2004 18:01:19 Sunrise 10-30-2004 07:27:46 Sunset 10-30-2004 18:00:06 Sunrise 10-31-2004 06:28:53 Sunset 10-31-2004 16:58:54 Sunrise 11-01-2004 06:30:01 Sunset 11-01-2004 16:57:44 Sunrise 11-02-2004 06:31:10 Sunset 11-02-2004 16:56:35 Compare 10-30-2004 with 10-31-2004. Sunrise is an hour earlier because daylight saving time has ended, just as predicted. There is an easier way to switch between timezones. Take a look at the directory zoneinfo as follows: $ ls /usr/share/zoneinfo Africa Chile Factory Iceland Mexico posix UCT America CST6CDT GB Indian Mideast posixrules Universal Antarctica Cuba GB-Eire Iran MST PRC US Arctic EET GMT iso3166.tab MST7MDT PST8PDT UTC Asia Egypt GMT0 Israel Navajo right WET Atlantic Eire GMT-0 Jamaica NZ ROC W-SU Australia EST GMT+0 Japan NZ-CHAT ROK zone.tab Brazil EST5EDT Greenwich Kwajalein Pacific Singapore Zulu Canada Etc Hongkong Libya Poland SystemV CET Europe HST MET Portugal Turkey TZ can be set to any one of these files. Some of these are directories and contain subdirectories, such as ./posix/America. This way you don not have to enter the timezone, offset, and range for dst, since it has already been calculated. $ export TZ=:/usr/share/zoneinfo/posix/America/Aruba $ export TZ=:/usr/share/zoneinfo/Egypt [Non-text portions of this message have been removed]

