date顯示時間
tsselect設(shè)置時區(qū)
本文是基本是[Linux的時間設(shè)置與同步(NTP)]的原文,只在一些地方更新和完善了一下。
一、時間和時區(qū)
如果有人問你說現(xiàn)在幾點? 你看了看表回答他說晚上8點了. 這樣回答看上去沒有什么問題,但是如果問你的這個人在歐洲的話那么你的回答就會讓他很疑惑,因為他那里還太陽當空呢.
這里就有產(chǎn)生了一個如何定義時間的問題. 因為在地球環(huán)繞太陽旋轉(zhuǎn)的24個小時中,世界各地日出日落的時間是不一樣的.所以我們才有劃分時區(qū)(timezone) 的必要,也就是把全球劃分成24個不同的時區(qū). 所以我們可以把時間的定義理解為一個時間的值加上所在地的時區(qū)(注意這個所在地可以精確到城市)
地理課上我們都學(xué)過格林威治時間(GMT), 它也就是0時區(qū)時間. 但是我們在計算機中經(jīng)常看到的是UTC. 它是Coordinated Universal Time的簡寫. 雖然可以認為UTC和GMT的值相等(誤差相當之小),但是UTC已經(jīng)被認定為是國際標準,所以我們都應(yīng)該遵守標準只使用UTC
那么假如現(xiàn)在中國當?shù)氐臅r間是晚上8點的話,我們可以有下面兩種表示方式
20:00 CST
12:00 UTC
這里的CST是Chinese Standard Time,也就是我們通常所說的北京時間了. 因為中國處在UTC+8時區(qū),依次類推那么也就是12:00 UTC了.
第一,不管通過任何渠道我們想要同步系統(tǒng)的時間,通常提供方只會給出UTC+0的時間值而不會提供時區(qū)(因為它不知道你在哪里).所以當我們設(shè)置系統(tǒng)時間的時候,設(shè)置好時區(qū)是首先要做的工作
第二,很多國家都有夏令時,那就是在一年當中的某一天時鐘撥快一小時(比如從UTC+8一下變成UTC+9了),那么同理到時候還要再撥慢回來.如果我們設(shè)置了正確的時區(qū),當需要改變時間的時候系統(tǒng)就會自動替我們調(diào)整
現(xiàn)在我們就來看一下如何在Linux下設(shè)置時區(qū),也就是time zone
二、如何設(shè)置Linux Time Zone
在Linux下glibc提供了我們事先編譯好的許多timezone文件, 他們就放在/usr/share/zoneinfo這個目錄下,這里基本涵蓋了大部分的國家和城市
1 2 3 4 5 6 7 | # ls -F /usr/share/zoneinfo/ Africa/ Asia/ Canada/ Cuba EST Factory GMT0 Hongkong Iran Japan Mexico/ Navajo Poland PRC ROK Universal W-SU America/ Atlantic/ CET EET EST5EDT GB GMT-0 HST iso3166.tab Kwajalein Mideast/ NZ Portugal PST8PDT Singapore US/ zone.tab Antarctica/ Australia/ Chile/ Egypt Etc/ GB-Eire GMT+0 Iceland Israel Libya MST NZ-CHAT posix/ right/ Turkey UTC Zulu Arctic/ Brazil/ CST6CDT Eire Europe/ GMT Greenwich Indian/ Jamaica MET MST7MDT Pacific/ posixrules ROC UCT WET |
在這里面我們就可以找到自己所在城市的time zone文件. 那么如果我們想查看對于每個time zone當前的時間我們可以用zdump命令
1 2 3 | # zdump /usr/share/zoneinfo/Asia/Chongqing # /usr/share/zoneinfo/Asia/Chongqing Fri May 27 10:35:24 2011 CST |
那么我們又怎么來告訴系統(tǒng)我們所在time zone是哪個呢? 方法有很多,這里舉出兩種
第一個就是修改/etc/localtime這個文件,這個文件定義了我么所在的local time zone.
我們可以在/usr/share/zoneinfo下找到我們的time zone文件然后拷貝去到/etc/localtimezone(或者做個symbolic link)
假設(shè)我們現(xiàn)在的time zone是BST(也就是英國的夏令時間,UTC+1)
1 2 | # date 2011年 05月 27日 星期五 10:52:05 CST |
我們想把time zone換成重慶所在的時區(qū)就可以這么做
1 2 3 4 | # ln -sf /usr/share/zoneinfo/posix/Asia/Chongqing /etc/localtime # date 2011年 05月 27日 星期五 10:39:18 CST |
這樣時區(qū)就改過來了(注意時間也做了相應(yīng)的調(diào)整)
第二種方法也就設(shè)置TZ環(huán)境變量的值. 許多程序和命令都會用到這個變量的值. TZ的值可以有多種格式,最簡單的設(shè)置方法就是使用tzselect命令
1 2 3 4 | # tzselect ... TZ='Asia/Chongqing'; export TZ |
tzselect是一個交互式腳本,會讓你選擇所在的國家和城市(這里省略了這些步驟),最后輸出相應(yīng)的TZ變量的值.那么如果你設(shè)置了TZ的值之后時區(qū)就又會發(fā)生變化
注:交互選擇這個過程,其實就是為了確定TZ變量的值,如果你知道正確的值,可以設(shè)定就可以了。
1 2 | # date 2011年 05月 27日 星期五 10:52:05 CST |
通過這兩個例子我們也可以發(fā)現(xiàn)TZ變量的值會優(yōu)先于/etc/localtime. 也就是說當TZ變量沒有定義的時候系統(tǒng)才使用/etc/localtime來確定time zone. 所以你想永久修改time zone的話那么可以把TZ變量的設(shè)置寫入/etc/profile里
好了現(xiàn)在我們知道怎么設(shè)置時區(qū)了,下面我們就來看看如何設(shè)置Linux的時間吧
三、Real Time Clock(RTC) and System Clock
說道設(shè)置時間這里還要明確另外一個概念就是在一臺計算機上我們有兩個時鐘:一個稱之為硬件時間時鐘(RTC),還有一個稱之為系統(tǒng)時鐘(System Clock)
硬件時鐘是指嵌在主板上的特殊的電路, 它的存在就是平時我們關(guān)機之后還可以計算時間的原因
系統(tǒng)時鐘就是操作系統(tǒng)的kernel所用來計算時間的時鐘. 它從1970年1月1日00:00:00 UTC時間到目前為止秒數(shù)總和的值 在Linux下系統(tǒng)時間在開機的時候會和硬件時間同步(synchronization),之后也就各自獨立運行了
那么既然兩個時鐘獨自運行,那么時間久了必然就會產(chǎn)生誤差了,下面我們來看一個例子
1 2 3 4 5 | # date 2011年 05月 27日 星期五 10:59:27 CST # hwclock --show 2011年05月27日 星期五 11時02分29秒 -0.863266 seconds |
通過hwclock –show或hwclock -r命令我們可以查看機器上的硬件時間(always in local time zone), 我們可以看到它和系統(tǒng)時間還是有一定的誤差的, 那么我們就需要把他們同步
如果我們想要把硬件時間設(shè)置成系統(tǒng)時間我們可以運行以下命令
1 2 3 | # hwclock --hctosys 或者 # hwclock -s |
反之,我們也可以把系統(tǒng)時間設(shè)置成硬件時間
1 2 3 | # hwclock --systohc 或者 # hwclock -w |
那么如果想設(shè)置硬件時間我們可以開機的時候在BIOS里設(shè)定.也可以用hwclock命令
1 | # hwclock --set --date="mm/dd/yy hh:mm:ss" |
如果想要修改系統(tǒng)時間那么用date命令就最簡單了
1 | # date -s "yy-mm-dd hh:mm:ss" |
現(xiàn)在我們知道了如何設(shè)置系統(tǒng)和硬件的時間. 但問題是如果這兩個時間都不準確了怎么辦? 那么我們就需要在互聯(lián)網(wǎng)上找到一個可以提供我們準確時間的服務(wù)器然后通過一種協(xié)議來同步我們的系統(tǒng)時間,那么這個協(xié)議就是NTP了. 注意接下去我們所要說的同步就都是指系統(tǒng)時間和網(wǎng)絡(luò)服務(wù)器之間的同步了
四、設(shè)置NTP Server前的準備
其實這個標題應(yīng)該改為設(shè)置”NTP Relay Server”前的準備更加合適. 因為不論我們的計算機配置多好運行時間久了都會產(chǎn)生誤差,所以不足以給互聯(lián)網(wǎng)上的其他服務(wù)器做NTP Server. 真正能夠精確地測算時間的還是原子鐘. 但由于原子鐘十分的昂貴,只有少部分組織擁有, 他們連接到計算機之后就成了一臺真正的NTP Server. 而我們所要做的就是連接到這些服務(wù)器上同步我們系統(tǒng)的時間,然后把我們自己的服務(wù)器做成NTP Relay Server再給互聯(lián)網(wǎng)或者是局域網(wǎng)內(nèi)的用戶提供同步服務(wù)
好了,前面講了一大堆理論,現(xiàn)在我們來動手實踐一下吧. 架設(shè)一個NTP Relay Server其實非常簡單,我們先把需要的RPM包裝上
1 | # rpm -ivh ntp-4.2.2p1-9.el5.centos.2.1.x86_64.rpm |
那么第一步我們就要找到在互聯(lián)網(wǎng)上給我們提供同步服務(wù)的NTP Server
http://www.pool.ntp.org是NTP的官方網(wǎng)站,在這上面我們可以找到離我們城市最近的NTP Server. NTP建議我們?yōu)榱吮U蠒r間的準確性,最少找兩個個NTP Server
那么比如在中國的話就可以選擇下面幾個服務(wù)器
1 2 3 | server 1.cn.pool.ntp.org server 0.asia.pool.ntp.org server 3.asia.pool.ntp.org |
它的一般格式都是number.country.pool.ntp.org
第二步要做的就是在打開NTP服務(wù)器之前先和這些服務(wù)器做一個同步,使得我們機器的時間盡量接近標準時間. 這里我們可以用ntpdate命令
1 2 3 4 5 | # ntpdate 1.cn.pool.ntp.org 27 May 11:18:56 ntpdate[26465]: adjust time server 61.153.197.226 offset 0.276787 sec # ntpdate 0.asia.pool.ntp.org 27 May 11:20:01 ntpdate[26470]: adjust time server 122.226.192.4 offset 0.211920 sec |
假如你的時間差的很離譜的話第一次會看到調(diào)整的幅度比較大,所以保險起見可以運行兩次. 那么為什么在打開NTP服務(wù)之前先要手動運行同步呢?
1. 因為根據(jù)NTP的設(shè)置,如果你的系統(tǒng)時間比正確時間要快的話那么NTP是不會幫你調(diào)整的,所以要么你把時間設(shè)置回去,要么先做一個手動同步
2. 當你的時間設(shè)置和NTP服務(wù)器的時間相差很大的時候,NTP會花上較長一段時間進行調(diào)整.所以手動同步可以減少這段時間
五、配置和運行NTP Server
現(xiàn)在我們就來創(chuàng)建NTP的配置文件了, 它就是/etc/ntp.conf. 我們只需要加入上面的NTP Server和一個driftfile就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # vi /etc/ntp.conf #注釋掉缺省的NTP服務(wù)器并添加兩個位置比較近的NTP服務(wù)器 #server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org server 1.cn.pool.ntp.org server 0.asia.pool.ntp.org driftfile /var/lib/ntp/drift #預(yù)設(shè)的一個內(nèi)部時鐘資料,用在沒有外部NTP服務(wù)器時,這里我們可以將它注解掉: # server 127.127.1.0 # local clock # fudge 127.127.1.0 stratum 10 |
ntp.conf配置說明
利用server設(shè)定上層NTP伺服器,上層 NTP 伺服器的設(shè)定方式為:
server [IP or hostname] [prefer]
在server后端可以接IP或主機名稱,perfer表示[優(yōu)先使用]的主機。
以driftfile記錄時間差異
設(shè)定的方式如下:
driftfile [可以被ntpd寫入的目錄與檔案]
因為預(yù)設(shè)的NTP Server本身的時間計算是依據(jù)BIOS的晶片震蕩周期頻率來計算的,但是這個數(shù)值與上層Time Server有誤差.所以NTP這個daemon(ntpd)會自動的去計算我們自己主機的頻率與上層Time server的頻率,并且將兩個頻率的誤差記錄下來,記錄下來的檔案就是在driftfile后面接的完整文件名中了!
關(guān)于文件名你必須要知道:
driftfile后面接的文件需要使用完整路徑;
該文件不能是連結(jié)檔;
該文件需要設(shè)定成 ntpd 這個 daemon 可以寫入的權(quán)限。
該文件所記錄的數(shù)值單位為:百萬分之一秒(ppm)。
driftfile后面接的檔案會被ntpd自動更新,所以他的權(quán)限一定要能夠讓ntpd 寫入才行。在CentOS 5.x預(yù)設(shè)的NTP伺服器中,使用的ntpd的owner是ntp ,這部份在/etc/sysconfig/ntpd中設(shè)置的!
如何同步硬件時鐘?
NTP一般只會同步system clock。但是如果我們也要同步RTC的話那么只需要把下面的選項打開就可以了
1 2 | # vi /etc/sysconfig/ntpd SYNC_HWCLOCK=yes |
接下來我們就啟動NTP Server,并且設(shè)置其在開機后自動運行
1 2 3 | # /etc/init.d/ntpd/start # chkconfig --level 35 ntpd on |
六、查看NTP服務(wù)的運行狀況
現(xiàn)在我們已經(jīng)啟動了NTP的服務(wù),但是我們的系統(tǒng)時間到底和服務(wù)器同步了沒有呢? 為此NTP提供了一個很好的查看工具: ntpq(NTP query)
我建議大家在打開NTP服務(wù)器后就可以運行ntpq命令來監(jiān)測服務(wù)器的運行.這里我們可以使用watch命令來查看一段時間內(nèi)服務(wù)器各項數(shù)值的變化
1 2 3 4 5 6 7 8 | # watch ntpq -p Every 2.0s: ntpq -p Fri May 27 14:06:57 2011 remote refid st t when poll reach delay offset jitter ============================================================================== Hshh.org 209.81.9.7 2 u 35 64 7 103.838 361.111 87.482 time.uni.net.th 202.28.214.2 2 u 98 64 6 450.107 343.325 137.580 LOCAL(0) .LOCL. 10 l 31 64 7 0.000 0.000 0.001 |
ntpq中各參數(shù)的含義
remote: 它指的就是本地機器所連接的遠程NTP服務(wù)器
refid: 它指的是參考的上一層NTP主機的地址
st: 遠程服務(wù)器的級別. 由于NTP是層型結(jié)構(gòu),有頂端的服務(wù)器,多層的Relay Server再到客戶端. 所以服務(wù)器從高到低級別可以設(shè)定為1-16. 為了減緩負荷和網(wǎng)絡(luò)堵塞,原則上應(yīng)該避免直接連接到級別為1的服務(wù)器的.
when: 用做計時,用來告訴我們還有多久本地機器就需要和遠程服務(wù)器進行一次時間同步
poll: 本地機和遠程服務(wù)器多少時間進行一次同步(單位為秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和服務(wù)器同步的頻率也就增加了,可以盡快調(diào)整到正確的時間范圍.之后poll值會逐漸增大,同步的頻率也就會相應(yīng)減小
reach: 這是一個八進制值,表示已經(jīng)向上層NTP伺服器要求更新的次數(shù)。每成功連接一次它的值就會增加。
delay: 網(wǎng)路傳輸過程當中延遲的時間,單位為 10^(-6) 秒
offset: 這是個最關(guān)鍵的值, 它告訴了我們本地機和服務(wù)器之間的時間差別. offset越接近于0,我們就和服務(wù)器的時間越接近。單位為10^(-3)秒
jitter: Linux系統(tǒng)時間與BIOS硬件時間的差異時間,單位為10^(-6)秒。簡單地說這個數(shù)值的絕對值越小我們和服務(wù)器的時間就越精確。
那么大家細心的話就會發(fā)現(xiàn)兩個問題: 第一我們連接的是1.cn.pool.ntp.org為什么和remote server不一樣? 第二那個最前面的+和*都是什么意思呢?
第一個問題是因為NTP提供給我們的是一個cluster server所以每次連接的得到的服務(wù)器都有可能是不一樣.同樣這也告訴我們了在指定NTP Server的時候應(yīng)該使用hostname而不是IP
第二個問題和第一個相關(guān),既然有這么多的服務(wù)器就是為了在發(fā)生問題的時候其他的服務(wù)器還可以正常地給我們提供服務(wù).那么如何知道這些服務(wù)器的狀態(tài)呢? 這就是第一個記號會告訴我們的信息
*
它告訴我們遠端的服務(wù)器已經(jīng)被確認為我們的主NTP Server,我們系統(tǒng)的時間將由這臺機器所提供
+
它將作為輔助的NTP Server和帶有*號的服務(wù)器一起為我們提供同步服務(wù). 當*號服務(wù)器不可用時它就可以接管
-
遠程服務(wù)器被clustering algorithm認為是不合格的NTP Server
x
遠程服務(wù)器不可用
了解這些之后我們就可以實時監(jiān)測我們系統(tǒng)的時間同步狀況了
七、NTP安全設(shè)置
運行一個NTP Server不需要占用很多的系統(tǒng)資源,所以也不用專門配置獨立的服務(wù)器,就可以給許多client提供時間同步服務(wù), 但是一些基本的安全設(shè)置還是很有必要的
那么這里一個很簡單的思路就是第一我們只允許局域網(wǎng)內(nèi)一部分的用戶連接到我們的服務(wù)器. 第二個就是這些client不能修改我們服務(wù)器上的時間
在/etc/ntp.conf文件中我們可以用restrict關(guān)鍵字來配置上面的要求
[restrict]參數(shù)的設(shè)定方式為:
restrict [你的IP] mask [netmask_IP] [parameter]
其中parameter 的參數(shù)主要有底下這些:
ignore:拒絕所有類型的NTP連線
nomodify:用戶端不能使用ntpc與ntpq 兩支程式來修改伺服器的時間參數(shù),但用戶端仍可透過這部主機來進行網(wǎng)路校時的
noquery:用戶端不能夠使用ntpq, ntpc等指令來查詢時間伺服器,等于不提供NTP的網(wǎng)路校時;
notrap:不提供trap這個遠程事件登錄(remote event logging)的功能。
notrust:拒絕沒有認證的用戶端。
nopeer:不與其他同一層的ntp服務(wù)器進行時間同步
如果你沒有在parameter的地方加上任何參數(shù)的話,這表示該IP或網(wǎng)段不受任何限制。一般來說,我們可以先關(guān)閉NTP的使用權(quán)限,然后再一個一個的啟用允許登入的網(wǎng)段。
首先我們對于默認的client拒絕所有的操作
1 | restrict default kod nomodify notrap nopeer noquery |
然后允許本機地址一切的操作
1 | restrict 127.0.0.1 |
最后我們允許局域網(wǎng)內(nèi)所有client連接到這臺服務(wù)器同步時間.但是拒絕讓他們修改服務(wù)器上的時間
1 | restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap |
把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置。 NTP還可以用key來做authenticaiton,這里就不詳細介紹了。有興趣的朋友可以參考ntp-keygen這個指令的相關(guān)說明。
八、NTP client的設(shè)置
做到這里我們已經(jīng)有了一臺自己的Relay Server。如果我們想讓局域網(wǎng)內(nèi)的其他client都進行時間同步的話那么我們就都應(yīng)該照樣再搭建一臺Relay Server,然后把所有的client都指向這兩臺服務(wù)器(注意不要把所有的client都指向Internet上的服務(wù)器). 只要在client的ntp.conf加上這你自己的服務(wù)器就可以了
注:多做一臺NTP的服務(wù)器是為了時間更加精準,并不是必需的。一臺也是可以達到網(wǎng)絡(luò)校時的效果的。
由于ntpd的server/client之間的時間誤差不允許超過1000秒,因此你得先手動進行時間同步,然后再設(shè)定與啟動服務(wù)。
ntpdate基本用法
1 2 3 4 5 6 | ntpdate [-dv] [NTP IP/hostname] 選項與參數(shù): -d :進入除錯模式 (debug) ,可以顯示出更多的有效資訊。 -v :有較多訊息的顯示。 |
1 | # ntpdate 192.168.0.215 |
配置客戶端
1 2 3 4 5 6 7 8 | vi /etc/ntp.conf #先注釋掉缺省的NTP服務(wù)器,然后增加自己的NTP服務(wù)器 #server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org server 192.168.1.215 server 192.168.1.106 |
1 2 3 4 5 6 7 | vi /etc/ntp/ntpservers #This file contains a list of ntp servers to show in the system-config-date user interface. #It is not recommended that you modify this file by hand. #注釋掉缺省的NTP服務(wù)器或者清空這個文件也可以 #0.centos.pool.ntp.org #1.centos.pool.ntp.org #2.centos.pool.ntp.org |
1 2 3 | vi /etc/ntp/step-tickers #增加自己的NTP服務(wù)器 192.168.1.215 |
同樣客戶端也啟動NTP服務(wù),并且設(shè)置其在開機后自動運行
1 2 3 | # /etc/init.d/ntpd/start # chkconfig --level 35 ntpd on |
九、ntpdate和ntpd的區(qū)別
ntpd不僅僅是時間同步服務(wù)器,他還可以做客戶端與標準時間服務(wù)器進行同步時間,而且是平滑同步,并非ntpdate立即同步,在生產(chǎn)環(huán)境中應(yīng)慎用ntpdate。
由于ntpdate是立即同步,在獲得一個時間之后,ntpdate使用settimeofday(2)設(shè)置系統(tǒng)時間,就會產(chǎn)生時鐘的躍變。
用ntpdate調(diào)整時間的方式,會有幾個非常明顯的問題:
第一,這樣做不安全。ntpdate的設(shè)置依賴于ntp服務(wù)器的安全性,攻擊者可以利用一些軟件設(shè)計上的缺陷,拿下ntp服務(wù)器并令與其同步的服務(wù)器執(zhí)行某些消耗性的任務(wù)。由于ntpdate采用的方式是跳變,跟隨它的服務(wù)器無法知道是否發(fā)生了異常(時間不一樣的時候,唯一的辦法是以服務(wù)器為準)。
第二,這樣做不精確。一旦ntp服務(wù)器宕機,跟隨它的服務(wù)器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。
第三,這樣做不夠優(yōu)雅。由于ntpdate是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯。例如,如果ntpdate發(fā)現(xiàn)你的時間快了,則可能會經(jīng)歷兩個相同的時刻,對某些應(yīng)用而言,這是致命的。
許多應(yīng)用程序依賴連續(xù)的時鐘,取得的時間是線性的。例如數(shù)據(jù)庫事務(wù),通常會地依賴這樣的事實:時間不會往回跳躍。
我們可以想象以下,假如Oracle服務(wù)器的時間是01:00 AM,標準時間是00:30 AM,很明顯Oracle服務(wù)器經(jīng)過他自己的時間00:40 AM。假若此時直接使用ntpdate將服務(wù)器與標準時間同步,那么意味著Oracle服務(wù)器將在同一天經(jīng)過兩個00:40 AM,這對于某些計劃任務(wù)來說可能是致命的。
因而,唯一一個可以令時間發(fā)生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務(wù)的那個時候。其余的時候,理想的做法是使用ntpd來校準時鐘,而不是調(diào)整計算機時鐘上的時間。
十、其它一些可用的同步時間服務(wù)器
129.7.1.66,210.72.145.44(中國國家授時中心服務(wù)器IP地址)
ntp.sjtu.edu.cn(上海交通大學(xué)網(wǎng)絡(luò)中心NTP服務(wù)器地址)
202.120.2.101(上海交通大學(xué)網(wǎng)絡(luò)中心NTP服務(wù)器地址)
time.nist.gov
ntp.fudan.edu.cn(復(fù)旦大學(xué)網(wǎng)絡(luò)中心NTP服務(wù)器地址)
timekeeper.isi.edu
subitaneous.cpsc.ucalgary.ca
usno.pa-x.dec.com
time.twc.weather.com
swisstime.ethz.ch
ntp0.fau.de
ntp3.fau.de
time-a.nist.gov
time-b.nist.gov
time-nw.nist.gov
nist1-sj.glassey.com
十一、常見錯誤
1、在ntp客戶端運行ntpdate serverIP,出現(xiàn)no server suitable for synchronization found的錯誤。
1 2 3 | #ntpdate 192.168.1.106 27 May 21:58:03 ntpdate[5891]: no server suitable for synchronization found |
在ntp客戶端用ntpdate –d serverIP查看,發(fā)現(xiàn)有“Server dropped: strata too high”的錯誤,并且顯示“stratum 16”。而正常情況下stratum這個值得范圍是“0~15”。
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 | # ntpdate -d 192.168.1.106 27 May 22:04:24 ntpdate[5949]: ntpdate 4.2.2p1@1.1570-o Sat Dec 19 00:56:14 UTC 2009 (1) Looking for host 192.168.1.106 and service ntp host found : 192.168.1.106 transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) receive(192.168.1.106) transmit(192.168.1.106) 192.168.1.106: Server dropped: strata too high server 192.168.1.106, port 123 stratum 16, precision -20, leap 11, trust 000 refid [192.168.1.106], delay 0.02589, dispersion 0.00005 transmitted 4, in filter 4 reference time: 00000000.00000000 Thu, Feb 7 2036 14:28:16.000 originate timestamp: d18a2ecc.72a5beb8 Fri, May 27 2011 22:08:12.447 transmit timestamp: d18a2de8.61c6b053 Fri, May 27 2011 22:04:24.381 filter delay: 0.02628 0.02628 0.02614 0.02589 0.00000 0.00000 0.00000 0.00000 filter offset: 228.0657 228.0656 228.0656 228.0657 0.000000 0.000000 0.000000 0.000000 delay 0.02589, dispersion 0.00005 offset 228.065737 27 May 22:04:24 ntpdate[5949]: no server suitable for synchronization found |
這是因為NTP server還沒有和其自身或者它的server同步上。
以下的定義是讓NTP Server和其自身保持同步,如果在ntp.conf中定義的server都不可用時,將使用local時間作為ntp服務(wù)提供給ntp客戶端。
1 2 | server 127.127.1.0 fudge 127.127.1.0 stratum 8 |
在ntp server上重新啟動ntp服務(wù)后,ntp server自身或者與其server的同步的需要一個時間段,這個過程可能是5分鐘,在這個時間之內(nèi)在客戶端運行ntpdate命令時會產(chǎn)生no server suitable for synchronization found的錯誤。
那么如何知道何時ntp server完成了和自身同步的過程呢?
在ntp server上使用命令:
1 2 3 4 5 6 7 8 | # watch ntpq -p Every 2.0s: ntpq -p Fri May 27 22:39:39 2011 remote refid st t when poll reach delay offset jitter ============================================================================== 221.7.129.79 80.127.4.179 2 u 59 64 77 58.386 20.698 1.954 *laika.paina.jp 133.243.238.243 2 u - 64 177 115.143 17.613 3.054 |
注意:由于我在前面的配置是把讓本地做為ntp服務(wù)的選項關(guān)閉了的,所以這里看不見LOCAL(0)項的。如果你沒有關(guān)閉會看到類似下面的行
1 | LOCAL(0) LOCAL(0) 10 l 21 64 1 0.000 0.000 0.001 |
這個就是與自身同步的ntp server。
在啟動ntp server服務(wù)后,reach這個值這個值就從0開始不斷增加,當增加到17的時候(從0到17是5次的變更,每一次是poll的值的秒數(shù),是64秒*5=320秒的時間)后,再ntpdate看看,應(yīng)該就可以了。
2、Server dropped: no data
從客戶端執(zhí)行ntpdate –d時有錯誤信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | transmit(192.168.1.6) transmit(192.168.1.6) transmit(192.168.1.6) transmit(192.168.1.6) transmit(192.168.1.6) 192.168.1.6: Server dropped: no data server 192.168.1.6, port 123 ..... 28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found |
出現(xiàn)這個問題的原因可能有以下兩個:
a)檢查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定義中使用了notrust的話,會導(dǎo)致以上錯誤。
使用以下命令檢查ntp的版本:
1 | # ntpq -c version |
下面是來自ntp官方網(wǎng)站的說明:
The behavior of notrust changed between versions 4.1 and 4.2.
In 4.1 (and earlier) notrust meant “Don’t trust this host/subnet for time”.
In 4.2 (and later) notrust means “Ignore all NTP packets that are not cryptographically authenticated.” This forces remote time servers to authenticate themselves to your (client) ntpd
解決方法:把notrust選項去掉。
b)檢查ntp server的防火墻。可能是server的防火墻屏蔽了upd 123端口。
可先以下命令暫時關(guān)閉iptables
1 | #service iptables stop |
關(guān)掉iptables服務(wù)后,再嘗試從ntp客戶端的同步,如果成功,證明是防火墻的問題,需要更改iptables的設(shè)置。
十二、參考資料
http://www.google.com
http://linux.vbird.org/linux_server/0440ntp.php#server_ntp.conf
http://www.showlife8.com/article.asp?id=121
http://www.linuxsir.org/bbs/lastpostinthread307840.html
http://www.blogjava.net/spray/archive/2008/07/10/213964.html