實作 LINUX 改時區,與 NTP server 同步時間

剛裝好的機器,由於 OS 是安裝的是公司精簡版(國外 RD release 的版本),Red Hat Enterprise Linux ES release 4 (Nahant Update 6) 4CD 被精簡成一片 CD,哇勒,一堆工具都被拿掉了...><|||,一開機發現裝好的機器時區居然是 UTC,UTC (Universal Time/Temps Cordonné 世界標準時間),但我們這兒是要用 CST (Central Standard Time 國家標準時間,也有說是中原標準時間)啊,GMT + 8 = UTC + 8 = CST,雖然自己加 8 個小時就好,不過看起來就是給他有點小不舒服,還是改掉好了... 首先我們來看一下目前機器的時間吧:
[root@KHXPROVS1 ~]# date
Fri Jun 13 02:18:59 UTC 2008
果然是 UTC,接下就是要變更時區的步驟囉:
1. 先備份一下 /etc/sysconfig/clock 吧
[root@KHXPROVS1 ~]# cp -p /etc/sysconfig/clock /etc/sysconfig/clock.orig
2. 接著是編輯 /etc/sysconfig/clock ,並將原來的內容換成如下所示:
[root@KHXPROVS1 ~]# vi /etc/sysconfig/clock
ZONE="UTC"
UTC=true
ARC=false
換成:
ZONE="Asia/Taipei"
UTC=false
ARC=false
3. 再來是置換掉目前使用的 /etc/localtime 檔:
cp -p /etc/localtime /etc/localtime.orig
cp -p /usr/share/zoneinfo/Asia/Taipei /etc/localtime
4. 完成囉~

接下來是讓機器跟 NTP server 同步一下系統時間吧:
1. 直接先用 ntpdate 的指令將時間同步一次,這裡使用 NTP server 的 IP 為 10.69.10.22:
[root@KHXPROVS1 ~]# ntpdate 10.69.10.22
13 Jun 11:22:30 ntpdate[20970]: step time server 10.69.10.22 offset 0.977210 sec
2. 用 hwclock -r 來查一下主機板上的系統時間為何:
[root@KHXPROVS1 ~]# date ; hwclock -r
Fri Jun 13 11:25:48 CST 2008
Fri 13 Jun 2008 11:25:48 AM CST -0.015905 seconds
3. 再 hwclock -w 將正確的時間寫回主機板上。
[root@KHXPROVS1 ~]# hwclock -w
再來是設定 NTP service 讓機器自動去跟 NTP server 校時:
1. 編輯 /etc/ntp.conf 檔案,並加入這兩行到檔案的最後:(其中:10.69.10.22是 NTP server 的 IP address)
[root@KHXDHCPS1 ~]# vi /etc/ntp.conf
....
server 10.69.10.22 prefer
restrict 10.69.10.22 mask 255.255.255.255 nomodify notrap noquery
2. 接著讓 ntpd 在每次開機都會自動執行:
[root@KHXPROVS1 ~]# chkconfig --list|grep ntp
ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@KHXPROVS1 ~]# chkconfig --level 2345 ntpd on
[root@KHXPROVS1 ~]# chkconfig --list|grep ntp
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@KHXAAAS1 bin]# service ntpd start
Starting ntpd: [ OK ]
3. 接下來可以用這幾個指令查詢一下 NTP sync. 的情況囉:
[root@KHXPROVS1 ~]# ntpstat
synchronised to NTP server (10.69.10.22) at stratum 5
time correct to within 81 ms
polling server every 128 s
[root@KHXPROVS1 ~]# ntptrace
127.0.0.1: stratum 5, offset -0.056545, synch distance 0.081977
KHXOMCS1: stratum 4, offset 0.000000, synch distance 0.010010

對了,附註一下,p.s. 如果有 firewall 的話,iptables 的 rule 中,需要在 INPUT chain 裡加入這一段 (這裡用開放 10.69.10.0/24 這個網域當範例)
/sbin/iptables -A INPUT -p UDP -i eth1 -s 10.69.10.0/24 --dport 123 -j ACCEPT
在 Firewall server 上應該會有像下面的結果:
[root@FW root]# iptables -L -n -v
Chain INPUT (policy DROP 3 packets, 315 bytes)
pkts bytes target prot opt in out source destination
14696 1524K ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
397K 226M icmpfilter all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT udp -- eth1 * 10.69.10.0/24 0.0.0.0/0 udp dpt:123
395K 226M block1 all -- * * 0.0.0.0/0 0.0.0.0/0
0 Responses