NTP的配置總結(整理+轉載)

一.NTP常見錯誤及解決辦法

最近按照網上查找的資料進行ntp Server的配置後,使用ntp Client進行時間同步,報錯信息“no server suitable for synchronization found” 。網上對於該問題的解釋的主流原因有

1.ntp server重啓後3-5分鐘再試  

2.ntp server配置文件中可能使用了notrust,需將其註釋  

3.防火牆udp 123端口沒有打開  

4.,網絡原因,比如路由器,防火牆,公司的上網策略禁止了ntp服務 

對於以上原因1,2,3的詳細解釋,請參考鏈接 http://www.blogjava.net/spray/archive/2008/07/10/213964.html   


而我遇到的問題是使用4方案解決,經過排查,是公司購買的***公司的的上網策略管理對ntp進行了限制。使用watch ntpq -p,查看ntp的狀態,如果所有時鐘服務器都顯示ntpd server always in'INIT'mode   ,那麼很有可能是網絡限制的原因。 

二.NTP配置步驟(菜鳥級)

一、軟件安裝(服務器端和客戶端均一樣操作)

1、拷貝ntp服務安裝包到虛擬機,安裝包共兩個:

ntpdate-4.2.6p5-5.el6.centos.x86_64.rpm

ntp-4.2.6p5-5.el6.centos.x86_64.rpm

2、進入安裝包所在目錄,依次安裝

rpm -i ntpdate-4.2.6p5-5.el6.centos.x86_64.rpm

rpm -i ntp-4.2.6p5-5.el6.centos.x86_64.rpm

 

注:如虛擬機和互聯網互通,也可以通過如下命令行在線安裝,不要如上兩個步驟:

  yum install ntp

二、服務器設置

1、服務器防火牆設置:

開放123端口,允許客戶端連接

vi /etc/sysconfig/iptables

添加:

-A INPUT -p udp -m udp --sport 123 -j ACCEPT

保存後,重啓iptables服務

service iptables restart:

2、配置服務器參數

 vi/etc/ntp.conf

增加可行的時間服務器列表:

server 0.cn.pool.ntp.org

server 1.ntp.api.bz

server 2.centos.pool.ntp.org iburst

server 3.centos.pool.ntp.org iburst

server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 8

配置日誌文件

logfile /var/log/ntp.log

3、設置服務器端開機啓動:

方法一:

在/etc/rc.local中添加如下ntp服務器的啓動命令行

/etc/init.d/ntpd start 

方法 二:

運行chkconfig設置服務器開機自啓動

chkconfig--level 3 ntpd  on 

設置成功後,可以通過如下命令查看服務啓動的設置情況

chkconfig--list ntpd

 

三、客戶端配置:

1、配置定時同步。

通過crond文件加入ntpdate命令,讓客戶端週期性向服務器同步時間。

編輯vi /etc/crontab

 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# For detailssee man 4 crontabs

 

# Example ofjob definition:

#.---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  | .---------- day of month (1 - 31)

# |  | |  .------- month (1 - 12) ORjan,feb,mar,apr ...

# |  | |  |  .---- day of week (0 - 6) (Sunday=0 or 7) ORsun,mon,tue,wed,thu,fri,sat

# |  | |  |  |

# *  * *  *  * user-name command to be executed

0 1 * * * root ntpdate 192.168.104.91;/sbin/hwclock -w

說明:每天凌晨1點從ntp服務器192.168.4.183同步時間。

 

也可以用sed命令如下增加:

sed-i '$a0 1 * * * root ntpdate 192.168.104.91;/sbin/hwclock -w' /etc/crontab

 

 重啓定時命令:

/etc/init.d/crond restart


 關於ntp,ntp Server,ntp Client 的詳細配置,請參考鏈接http://blog.csdn.net/iloli/article/details/6431757   以及 http://my.oschina.net/myaniu/blog/182959


以下內容是對上述鏈接的文章的原文,請參考

一.轉載自http://www.blogjava.net/spray/archive/2008/07/10/213964.html   

錯誤1.Server dropped: Strata too high

ntp客戶端運行ntpdate serverIP,出現no server suitable for synchronization found的錯誤。

ntp客戶端用ntpdate –d serverIP查看,發現有“Server dropped: strata too high”的錯誤,並且顯示“stratum 16”。而正常情況下stratum這個值得範圍是“0~15”。

這是因爲NTP server還沒有和其自身或者它的server同步上。

以下的定義是讓NTP Server和其自身保持同步,如果在/ntp.conf中定義的server都不可用時,將使用local時間作爲ntp服務提供給ntp客戶端。

server 127.127.1.0
fudge 127.127.1.0 stratum 8 


ntp server上重新啓動ntp服務後,ntp server自身或者與其server的同步的需要一個時間段,這個過程可能是5分鐘,在這個時間之內在客戶端運行ntpdate命令時會產生no server suitable for synchronization found的錯誤。

那麼如何知道何時ntp server完成了和自身同步的過程呢?

ntp server上使用命令:

# watch ntpq -p


出現畫面:

Every 2.0s: ntpq -p                                                                                                             Thu Jul 10 02:28:32 2008

     remote           refid      st t when poll reach   delay   offset jitter

==============================================================================

 192.168.30.22   LOCAL(0)         8 u   22   64    1    2.113 179133.   0.001

 LOCAL(0)        LOCAL(0)        10 l   21   64    1    0.000   0.000  0.001

注意LOCAL的這個就是與自身同步的ntp server

注意reach這個值,在啓動ntp server服務後,這個值就從0開始不斷增加,當增加到17的時候,從0175次的變更,每一次是poll的值的秒數,是64*5=320秒的時間。

如果之後從ntp客戶端同步ntp server還失敗的話,用ntpdate –d來查詢詳細錯誤信息,再做判斷。

錯誤2.Server dropped: no data

從客戶端執行
netdate –d時有錯誤信息如下:

transmit(192.168.30.22)

transmit(192.168.30.22)

transmit(192.168.30.22)

transmit(192.168.30.22)

transmit(192.168.30.22)

192.168.30.22: Server dropped: no data

server 192.168.30.22, port 123

.....
28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found

出現這個問題的原因可能有2

1。檢查ntp的版本,如果你使用的是ntp4.2(包括4.2)之後的版本,在restrict的定義中使用了notrust的話,會導致以上錯誤。

使用以下命令檢查ntp的版本:

# ntpq -c version


下面是來自ntp官方網站的說明:
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去掉。


2
。檢查ntp server的防火牆。可能是server的防火牆屏蔽了upd 123端口。

可以用命令

#service iptables stop


來關掉iptables服務後再嘗試從ntp客戶端的同步,如果成功,證明是防火牆的問題,需要更改iptables的設置。




2.轉載自http://blog.csdn.net/iloli/article/details/6431757

Network Time Protocol (NTP) 也是RHCE新增的考試要求. 學習的時候也順便複習了一下如何設置Linux的時間,現在拿出來和大家分享

設置NTP服務器不難但是NTP本身是一個很複雜的協議. 這裏只是簡要地介紹一下實踐方法
和上次一樣,下面的實驗都在RHEL5上運行

 

1. 時間和時區

如果有人問你說現在幾點? 你看了看錶回答他說晚上8點了. 這樣回答看上去沒有什麼問題,但是如果問你的這個人在歐洲的話那麼你的回答就會讓他很疑惑,因爲他那裏還太陽當空呢.

這裏就有產生了一個如何定義時間的問題. 因爲在地球環繞太陽旋轉的24個小時中,世界各地日出日落的時間是不一樣的.所以我們纔有劃分時區(timezone) 的必要,也就是把全球劃分成24個不同的時區. 所以我們可以把時間的定義理解爲一個時間的值加上所在地的時區(注意這個所在地可以精確到城市)

地理課上我們都學過格林威治時間(GMT), 它也就是0時區時間. 但是我們在計算機中經常看到的是UTC. 它是Coordinated Universal Time的簡寫. 雖然可以認爲UTC和GMT的值相等(誤差相當之小),但是UTC已經被認定爲是國際標準,所以我們都應該遵守標準只使用UTC

那麼假如現在中國當地的時間是晚上8點的話,我們可以有下面兩種表示方式
20:00 CST
12:00 UTC

這裏的CST是Chinese Standard Time,也就是我們通常所說的北京時間了. 因爲中國處在UTC+8時區,依次類推那麼也就是12:00 UTC了.

爲什麼要說這些呢(呵呵這裏不是地理論壇吧...)

第一,不管通過任何渠道我們想要同步系統的時間,通常提供方只會給出UTC+0的時間值而不會提供時區(因爲它不知道你在哪裏).所以當我們設置系統時間的時候,設置好時區是首先要做的工作
第二,很多國家都有夏令時(我記得小時候中國也實行過一次),那就是在一年當中的某一天時鐘撥快一小時(比如從UTC+8一下變成UTC+9了),那麼同理到時候還要再撥慢回來.如果我們設置了正確的時區,當需要改變時間的時候系統就會自動替我們調整

現在我們就來看一下如何在Linux下設置時區,也就是time zone

 

2. 如何設置Linux Time Zone

在Linux下glibc提供了我們事先編譯好的許多timezone文件, 他們就放在/usr/share/zoneinfo這個目錄下,這裏基本涵蓋了大部分的國家和城市
代碼:
# ls -F /usr/share/zoneinfo/
Africa/      Chile/   Factory    Iceland      Mexico/   posix/      Universal
America/     CST6CDT  GB         Indian/      Mideast/  posixrules  US/
Antarctica/  Cuba     GB-Eire    Iran         MST       PRC         UTC
Arctic/      EET      GMT        iso3166.tab  MST7MDT   PST8PDT     WET
Asia/        Egypt    GMT0       Israel       Navajo    right/      W-SU
Atlantic/    Eire     GMT-0      Jamaica      NZ        ROC         zone.tab
Australia/   EST      GMT+0      Japan        NZ-CHAT   ROK         Zulu
Brazil/      EST5EDT  Greenwich  Kwajalein    Pacific/  Singapore
Canada/      Etc/     Hongkong   Libya        Poland    Turkey
CET          Europe/  HST        MET          Portugal  UCT在這裏面我們就可以找到自己所在城市的time zone文件. 那麼如果我們想查看對於每個time zone當前的時間我們可以用zdump命令
代碼:
# zdump Hongkong
Hongkong  Fri Jul  6 06:13:57 2007 HKT那麼我們又怎麼來告訴系統我們所在time zone是哪個呢? 方法有很多,這裏舉出兩種

第一個就是修改/etc/localtime這個文件,這個文件定義了我麼所在的local time zone.
我們可以在/usr/share/zoneinfo下找到我們的time zone文件然後拷貝去到/etc/localtimezone(或者做個symbolic link)

假設我們現在的time zone是BST(也就是英國的夏令時間,UTC+1)
代碼:
# date
Thu Jul  5 23:33:40 BST 2007我們想把time zone換成上海所在的時區就可以這麼做
代碼:
# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime
# date
Fri Jul  6 06:35:52 CST 2007
這樣時區就改過來了(注意時間也做了相應的調整)

第二種方法也就設置TZ環境變量的值. 許多程序和命令都會用到這個變量的值. TZ的值可以有多種格式,最簡單的設置方法就是使用tzselect命令
代碼:
# tzselect
...
TZ='America/Los_Angeles';export TZtzselect
會讓你選擇所在的國家和城市(我省略了這些步驟),最後輸出相應的TZ變量的值.那麼如果你設置了TZ的值之後時區就又會發生變化

代碼:
# date
Thu Jul  5 15:48:11 PDT 2007
通過這兩個例子我們也可以發現TZ變量的值會override /etc/localtime. 也就是說當TZ變量沒有定義的時候系統才使用/etc/localtime來確定time zone. 所以你想永久修改time zone的話那麼可以把TZ變量的設置寫入/etc/profile裏

好了現在我們知道怎麼設置時區了,下面我們就來看看如何設置Linux的時間吧

 

3. Real Time Clock(RTC) and System Clock

說道設置時間這裏還要明確另外一個概念就是在一臺計算機上我們有兩個時鐘:一個稱之爲硬件時間時鐘(RTC),還有一個稱之爲系統時鐘(System Clock)

硬件時鐘是指嵌在主板上的特殊的電路, 它的存在就是平時我們關機之後還可以計算時間的原因
系統時鐘就是操作系統的kernel所用來計算時間的時鐘. 它從1970年1月1日00:00:00 UTC時間到目前爲止秒數總和的值 在Linux下系統時間在開機的時候會和硬件時間同步(synchronization),之後也就各自獨立運行了

那麼既然兩個時鐘獨自運行,那麼時間久了必然就會產生誤差了,下面我們來看一個例子
代碼:
# date
Fri Jul  6 00:27:13 BST 2007
# hwclock --show
Fri 06 Jul 2007 12:27:17 AM BST  -0.968931 seconds 
通過hwclock --show 命令我們可以查看機器上的硬件時間(always in local time zone), 我們可以看到它和系統時間還是有一定的誤差的, 那麼我們就需要把他們同步

如果我們想要把硬件時間設置成系統時間我們可以運行以下命令
代碼:
# hwclock --hctosys  
反之,我們也可以把系統時間設置成硬件時間
代碼:
# hwclock --systohc  
那麼如果想設置硬件時間我們可以開機的時候在BIOS裏設定.也可以用hwclock命令
代碼:
# hwclock --set --date="mm/dd/yy hh:mm:ss"  
如果想要修改系統時間那麼用date命令就最簡單了
代碼:
# date -s "dd/mm/yyyy hh:mm:ss"  

現在我們知道了如何設置系統和硬件的時間. 但問題是如果這兩個時間都不準確了怎麼辦? 那麼我們就需要在互聯網上找到一個可以提供我們準確時間的服務器然後通過一種協議來同步我們的系統時間,那麼這個協議就是NTP了. 注意接下去我們所要說的同步就都是指系統時間和網絡服務器之間的同步了


4. 設置NTP Server前的準備

其實這個標題應該改爲設置"NTP Relay Server"前的準備更加合適. 因爲不論我們的計算機配置多好運行時間久了都會產生誤差,所以不足以給互聯網上的其他服務器做NTP Server. 真正能夠精確地測算時間的還是原子鐘. 但由於原子鐘十分的昂貴,只有少部分組織擁有, 他們連接到計算機之後就成了一臺真正的NTP Server. 而我們所要做的就是連接到這些服務器上同步我們系統的時間,然後把我們自己的服務器做成NTP Relay Server再給互聯網或者是局域網內的用戶提供同步服務

好了,前面講了一大堆理論,現在我們來動手實踐一下吧. 架設一個NTP Relay Server其實非常簡單,我們先把需要的RPM包裝上
是否已經安裝了NTP包可以用這條命令來確定:

[root@NTPser ~]# rpm -qa | grep ntp
ntp-4.2.2p1-9.el5_4.1
chkfontpath-1.10.1-1.1
出現以上代碼則表示已安裝NTP包,否則用下面方法安裝:
代碼:

# rpm -ivh ntp-4.2.2p1-5.el5.rpm
 
那麼第一步我們就要找到在互聯網上給我們提供同步服務的NTP Server

http://www.pool.ntp.org是NTP的官方網站,在這上面我們可以找到離我們城市最近的NTP Server. NTP建議我們爲了保障時間的準確性,最少找兩個個NTP Server
那麼比如在英國的話就可以選擇下面兩個服務器
0.uk.pool.ntp.org
1.uk.pool.ntp.org

它的一般格式都是number.country.pool.ntp.org

第二步要做的就是在打開NTP服務器之前先和這些服務器做一個同步,使得我們機器的時間儘量接近標準時間. 
這裏我們可以用ntpdate命令手動更新時間
代碼:
# ntpdate 0.uk.pool.ntp.org
 6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec
# ntpdate 0.pool.ntp.org
 6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec
假如你的時間差的很離譜的話第一次會看到調整的幅度比較大,所以保險起見可以運行兩次. 那麼爲什麼在打開NTP服務之前先要手動運行同步呢?
1. 因爲根據NTP的設置,如果你的系統時間比正確時間要快的話那麼NTP是不會幫你調整的,所以要麼你把時間設置回去,要麼先做一個手動同步
2. 當你的時間設置和NTP服務器的時間相差很大的時候,NTP會花上較長一段時間進行調整.所以手動同步可以減少這段時間

5. 配置和運行NTP Server

現在我們就來創建NTP的配置文件了, 它就是/etc/ntp.conf. 我們只需要加入上面的NTP Server和一個driftfile就可以了
代碼:
# vi /etc/ntp.conf

server 210.72.145.44     #這是中國國家授時中心的IP
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
                                     
fudge 127.127.1.0 stratum 0  stratum
 
 這行是時間服務器的層次。設爲0則爲頂級,如果要向別的NTP服務器更新時間,請不要把它設爲0

driftfile /var/lib/ntp/ntp.drift  非常的簡單. 接下來我們就啓動NTP Server,並且設置其在開機後自動運行
代碼:
# /etc/init.d/ntpd start
# chkconfig --level 35 ntpd on

 

6. 查看NTP服務的運行狀況

現在我們已經啓動了NTP的服務,但是我們的系統時間到底和服務器同步了沒有呢? 爲此NTP提供了一個很好的查看工具: ntpq (NTP query)

我建議大家在打開NTP服務器後就可以運行ntpq命令來監測服務器的運行.這裏我們可以使用watch命令來查看一段時間內服務器各項數值的變化
代碼:
# watch ntpq -p
Every 2.0s: ntpq -p                                  Sat Jul  7 00:41:45 2007

     remote           refid      st t when poll reach   delay   offset  jitter
===========================================================
+193.60.199.75   193.62.22.98     2 u   52   64  377    8.578   10.203 289.032
*mozart.musicbox 192.5.41.41      2 u   54   64  377   19.301  -60.218 292.411

 

現在我就來解釋一下其中的含義

  remote: 它指的就是本地機器所連接的遠程NTP服務器
      refid: 它指的是給遠程服務器(e.g. 193.60.199.75)提供時間同步的服務器
          st: 遠程服務器的層級別(stratum). 由於NTP是層型結構,有頂端的服務器,多層的Relay Server再到客戶端. 所以服務器從高到低級別可以設定爲1-16. 爲了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別爲1的服務器的.
            t: 這個.....我也不知道啥意思^_^
    when: 我個人把它理解爲一個計時器用來告訴我們還有多久本地機器就需要和遠程服務器進行一次時間同步
       poll: 本地機和遠程服務器多少時間進行一次同步(單位爲秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和服務器同步的頻率也就增加了,可以儘快調整到正確的時間範圍.之後poll值會逐漸增大,同步的頻率也就會相應減小
    reach: 這是一個八進制值,用來測試能否和服務器連接.每成功連接一次它的值就會增加
    delay: 從本地機發送同步要求到服務器的round trip time
    offset: 這是個最關鍵的值, 它告訴了我們本地機和服務器之間的時間差別. offset越接近於0,我們就和服務器的時間越接近
     jitter: 這是一個用來做統計的值. 它統計了在特定個連續的連接數裏offset的分佈情況. 簡單地說這個數值的絕對值越小我們和服務器的時間就越精確

那麼大家細心的話就會發現兩個問題: 第一我們連接的是0.uk.pool.ntp.org爲什麼和remote server不一樣? 第二那個最前面的+和*都是什麼意思呢?

第一個問題不難理解,因爲NTP提供給我們的是一個cluster server所以每次連接的得到的服務器都有可能是不一樣.同樣這也告訴我們了在指定NTP Server的時候應該使用hostname而不是IP

第二個問題和第一個相關,既然有這麼多的服務器就是爲了在發生問題的時候其他的服務器還可以正常地給我們提供服務.那麼如何知道這些服務器的狀態呢? 這就是第一個記號會告訴我們的信息

* 它告訴我們遠端的服務器已經被確認爲我們的主NTP Server,我們系統的時間將由這臺機器所提供
+ 它將作爲輔助的NTP Server和帶有*號的服務器一起爲我們提供同步服務. 當*號服務器不可用時它就可以接管
- 遠程服務器被clustering algorithm認爲是不合格的NTP Server
x 遠程服務器不可用

 

瞭解這些之後我們就可以實時監測我們系統的時間同步狀況了

 

7. NTP安全設置

運行一個NTP Server不需要佔用很多的系統資源,所以也不用專門配置獨立的服務器,就可以給許多client提供時間同步服務, 但是一些基本的安全設置還是很有必要的
那麼這裏一個很簡單的思路就是第一我們只允許局域網內一部分的用戶連接到我們的服務器. 第二個就是這些client不能修改我們服務器上的時間

關於權限設定部分 
權限的設定主要以 restrict 這個參數來設定,主要的語法爲: 
restrict IP地址 mask 子網掩碼 參數 
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP 
參數有以下幾個: 
ignore :關閉所有的 NTP 聯機服務 
nomodify:客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網絡校時。 
notrust :客戶端除非通過認證,否則該客戶端來源將被視爲不信任子網 
noquery :不提供客戶端的時間查詢 
注意:如果參數沒有設定,那就表示該 IP (或子網)沒有任何限制!

在/etc/ntp.conf文件中我們可以用restrict關鍵字來配置上面的要求

首先我們對於默認的client拒絕所有的操作
代碼:
restrict default kod nomodify notrap nopeer noquery

然後允許本機地址一切的操作
代碼:
restrict 127.0.0.1

最後我們允許局域網內所有client連接到這臺服務器同步時間.但是拒絕讓他們修改服務器上的時間
代碼:
restrict 192.168.1.0 mask 255.255.255.0 nomodify

把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置. NTP還可以用key來做authentication,這裏就不詳細介紹了

 

8. NTP client的設置

做到這裏我們已經有了一臺自己的Relay Server.如果我們想讓局域網內的其他client都進行時間同步的話那麼我們就都應該照樣再搭建一臺Relay Server,然後把所有的client都指向這兩臺服務器(注意不要把所有的client都指向Internet上的服務器). 只要在client的/etc/ntp.conf加上這你自己的服務器就可以了
代碼:
server ntp1.leonard.com
server ntp2.leonard.com

 

LINUX客戶端使用
ntpdate 172.30.218.114 
來向NTP服務器同步自己的時間
其它LINUX如果僅作爲只客戶端的話,則不能啓動ntpd服務!否則無法運行ntpdata 服務器地址 來同步時間
之後可以使用cron或修改crontab文件定期向NTP服務器更新時間,並用
# hwclock --systohc  
將系統時間設置爲硬件時間

9. 一些補充和拾遺(挺重要)

1. 配置文件中的driftfile是什麼?
我們每一個system clock的頻率都有小小的誤差,這個就是爲什麼機器運行一段時間後會不精確. NTP會自動來監測我們時鐘的誤差值並予以調整.但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以後之前的計算結果也就不會丟失了

2. 如何同步硬件時鐘?
NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了
代碼:
# vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes

 

3、利用crontab讓LINUX NTP定時更新時間
注:讓linux運行ntpdate更新時間時,linux不能開啓NTP服務,否則會提示端口被佔用:如下
[root@ESXI ~]# ntpdate 1.rhel.pool.ntp.org                                 
20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting

crontab文件配置簡要說明
命令格式的前一部分是對時間的設定,後面一部分是要執行的命令。時間的設定我們有一定的約定,前面五個*號代表五個數字,數字的取值範圍和含義如下:
分鐘 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
除了數字還有幾個個特殊的符號就是“*”、“/”和“-”、“,”,“*”代表所有的取值範圍內的數字,“/”代表每的意思,“*/5”表示每5個單位,“-”代表從某個數字到某個數字,“,”分開幾個離散的數字。以下舉幾個例子說明問題:
每天早上6點:
0 6 * * *  command
每兩個小時:
0 */2 * * *  command
晚上11點到早上8點之間每兩個小時,早上八點:
0 23-7/2,8 * * * command
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點:
0 11 4 * 1-3 command 
1月1日早上4點:
0 4 1 1 * command

3.3、設置開機自動啓動服務
運行setup或其它服務設置工具,將crond服務勾選上 
chkconfig --level 2345 crond on  定義在這幾個系統運行級別上啓用crond (系統安裝完默認就是這個設置)
__________________________________________

 

10.NTP客戶端的設置

一、LINUX做爲客戶端自動同步時間
如果想定時進行時間校準,可以使用crond服務來定時執行。
編輯 /etc/crontab 文件
加入下面一行:

30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w  #192.168.0.1是NTP服務器的IP地址
然後重啓crond服務
service crond restart 
這樣,每天 8:30 Linux 系統就會自動的進行網絡時間校準。

 

二、WINDOWS 需要打開windows time服務和RPC的二個服務
如果在打開windows time 服務,時報 錯誤1058,進行下面操作 
1.運行 cmd 進入命令行,然後鍵入
w32tm /register  進行註冊
正確的響應爲:W32Time 成功註冊。

2.如果上一步正確,用 net start "windows time" 或 net start w32time 啓動服務。

 

11.其它造成無法成功更新的原因:
1、客戶端的日期必須要設置正確,不能超出正常時間24小時,不然會因爲安全原因被拒絕更新。其次客戶端的時區必須要設置好,以確保不會更新成其它時區的時間。
2、fudge 127.127.1.0 stratum 10 如果是LINUX做爲NTP服務器,stratum(層級)的值不能太大,如果要向上級NTP更新可以設成2
3、LINUX的NTP服務器必須記得將從上級NTP更新的時間從系統時間寫到硬件裏去 hwclock --systohc 
     NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了
      代碼:
      # vi /etc/sysconfig/ntpd
      SYNC_HWCLOCK=yes
4、Linux如果開啓了NTP服務,則不能手動運行ntpdate更新時間(會報端口被佔用),它只能根據/etc/ntp.conf 裏server 字段後的服務器地址按一定時間間隔自動向上級NTP服務器更新時間。可以運行命令 ntpstat 查看每次更新間隔如:
[root@ESXI ~]# ntpstat
synchronised to NTP server (210.72.145.44) at stratum 2    #本NTP服務器層次爲2,已向210.72.145.44 NTP同步過
   time correct to within 93 ms                                               #時間校正到相差93ms之內
   polling server every 1024 s                                                 #每1024秒會向上級NTP輪詢更新一次時間
 




三.以下內容轉載自http://my.oschina.net/myaniu/blog/182959


在Windwos中,系統時間的設置很簡單,界面操作,通俗易懂。而且設置後,重啓,關機都沒關係。系統時間會自動保存在Bios的時鐘裏面,啓動計算機的時候,系統會自動在Bios裏面取硬件時間,以保證時間的不間斷。

    但在Linux下,默認情況下,系統時間和硬件時間,並不會自動同步。在Linux運行過程中,系統時間和硬件時間以異步的方式運行,互不干擾。硬件時間的運行,是靠Bios電池來維持,而系統時間,是用CPU tick來維持的。

    在系統開機的時候,會自動從Bios中取得硬件時間,設置爲系統時間。

 

一.Linux系統時間的設置

    在Linux中設置系統時間,可以用date命令:

//查看時間

[root@localhost ~]# date
2008年 12月 12日 星期五 14:44:12 CST

//修改時間
[root@localhost ~]# date --set "1/1/09 00:01" <== (月/日/年時:分:秒)
2009年 01月 01日 星期四 00:01:00 CST

//date 有幾種時間格式可接受,這樣也可以設置時間:

[root@localhost ~]# date 012501012009.30  <== 月日時分年.秒
2009年 01月 25日 星期日 01:01:30 CST

 

 二.Linux硬件時間的設置

    硬件時間的設置,可以用hwclock或者clock命令。其中,clock和hwclock用法相近,只用一個就 行,只不過clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。

//查看硬件時間 可以是用 hwclock ,hwclock --show 或者 hwclock -r

[root@localhost ~]# hwclock --show
2008年12月12日 星期五 06時52分07秒  -0.376932 seconds

//設置硬件時間

[root@localhost ~]# hwclock --set --date="1/25/09 00:00" <== 月/日/年時:分:秒
[root@localhost ~]# hwclock
2009年01月25日 星期日 00時00分06秒  -0.870868 seconds

 

三.系統時間和硬件時間的同步

    同步系統時間和硬件時間,可以使用hwclock命令。

//以系統時間爲基準,修改硬件時間

[root@localhost ~]# hwclock --systohc <== sys(系統時間)to(寫到)hc(Hard Clock)
[root@localhost ~]# hwclock -w

//以硬件時間爲基準,修改系統時間

[root@localhost ~]# hwclock --hctosys 
[root@localhost ~]# hwclock -s

 

四.不同機器之間的時間同步

    爲了避免主機時間因爲長期運作下所導致的時間偏差,進行時間同步(synchronize)的工作是非常必要的。Linux系統下,一般使用ntp服務器 來同步不同機器的時間。一臺機器,可以同時是ntp服務器和ntp客戶機。在網絡中,推薦使用像DNS服務器一樣分層的時間服務器來同步時間。

    同步時間,可以使用ntpdate命令,也可以使用ntpd服務。

    使用ntpdate比較簡單。格式如下:

[root@linux ~]# ntpdate [-nv] [NTP IP/hostname]
[root@linux ~]# ntpdate 192.168.0.2
[root@linux ~]# ntpdate time.ntp.org

    但這樣的同步,只是強制性的將系統時間設置爲ntp服務器時間。如果cpu tick有問題,只是治標不治本。所以,一般配合cron命令,來進行定期同步設置。比如,在crontab中添加:

0 12 * * * * /usr/sbin/ntpdate 192.168.0.1

     這樣,會在每天的12點整,同步一次時間。ntp服務器爲192.168.0.1。

    使用ntpd服務,要好於ntpdate加cron的組合。因爲,ntpdate同步時間,會造成時間的跳躍,對一些依賴時間的程序和服務會造成影響。比 如sleep,timer等。而且,ntpd服務可以在修正時間的同時,修正cpu tick。理想的做法爲,在開機的時候,使用ntpdate強制同步時間,在其他時候使用ntpd服務來同步時間。

    要注意的是,ntpd 有一個自我保護設置: 如果本機與上源時間相差太大, ntpd 不運行. 所以新設置的時間服務器一定要先 ntpdate 從上源取得時間初值, 然後啓動 ntpd服務。ntpd服務 運行後, 先是每64秒與上源服務器同步一次, 根據每次同步時測得的誤差值經複雜計算逐步調整自己的時間, 隨着誤差減小, 逐步增加同步的間隔. 每次跳動, 都會重複這個調整的過程.

 

五.ntpd服務的設置

    ntpd服務的相關設置文件如下:

1./etc/ntp.conf:這個是NTP daemon的主要設文件,也是 NTP 唯一的設定文件。

2./usr /share/zoneinfo/:在這個目錄下的文件其實是規定了各主要時區的時間設定文件,例如北京地區的時區設定文件在 /usr/share/zoneinfo/Asia/Beijing 就是了。這個目錄裏面的文件與底下要談的兩個文件(clock 與localtime)是有關係的。

3./etc/sysconfig/clock:這個文件其實也不包含在NTP 的 daemon 當中,因爲這個是 linux 的主要時區設定文件。每次開機後,Linux 會自動的讀取這個文件來設定自己系統所默認要顯示的時間。

4./etc /localtime:這個文件就是“本地端的時間配置文件”。剛剛那個clock 文件裏面規定了使用的時間設置文件(ZONE) 爲 /usr/share/zoneinfo/Asia/Beijing ,所以說,這就是本地端的時間了,此時, Linux系統就會將Beijing那個文件另存爲一份 /etc/localtime文件,所以未來我們的時間顯示就會以Beijing那個時間設定文件爲準。

5. /etc/timezone:系統時區文件

 

    下面重點說說 /etc/ntp.conf文件的設置。在 NTP Server 的設定上面,其實最好不要對 Internet 無限制的開放,儘量僅提供您自己內部的 Client 端聯機進行網絡校時就好。此外, NTP Server 總也是需要網絡上面較爲準確的主機來自行更新自己的時間啊,所以在我們的 NTP Server 上面也要找一部最靠近自己的 Time Server 來進行自我校正。事實上, NTP 這個服務也是 Server/Client 的一種模式。

[root@linux ~]# vi /etc/ntp.conf 
# 1. 關於權限設定部分 
#   權限的設定主要以 restrict 這個參數來設定,主要的語法爲: 
#   restrict IP mask netmask_IP parameter 
#   其中 IP 可以是軟件地址,也可以是 default ,default 就類似 0.0.0.0 
#   至於 paramter 則有: 
#   ignore :關閉所有的 NTP 聯機服務 
#   nomodify:表示 Client 端不能更改 Server 端的時間參數,不過,

#   Client 端仍然可以透過 Server 端來進行網絡校時。 
#   notrust :該 Client 除非通過認證,否則該 Client 來源將被視爲不信任網域 
#   noquery :不提供 Client 端的時間查詢

#   notrap :不提供trap這個遠程事件登入

#  如果 paramter 完全沒有設定,那就表示該 IP (或網域)“沒有任何限制”

restrict default nomodify notrap noquery # 關閉所有的 NTP 要求封包 
restrict 127.0.0.1    #這是允許本級查詢
restrict 192.168.0.1 mask 255.255.255.0 nomodify 
#在192.168.0.1/24網段內的服務器就可以通過這臺NTP Server進行時間同步了 
# 2. 上層主機的設定 
#  要設定上層主機主要以 server 這個參數來設定,語法爲:
#  server [IP|HOST Name] [prefer]
#  Server 後面接的就是我們上層 Time Server 囉!而如果 Server 參數 
#  後面加上 perfer 的話,那表示我們的 NTP 主機主要以該部主機來作爲 
#  時間校正的對應。另外,爲了解決更新時間封包的傳送延遲動作, 
#  所以可以使用 driftfile 來規定我們的主機 
#  在與 Time Server 溝通時所花費的時間,可以記錄在 driftfile  
#  後面接的文件內,例如下面的範例中,我們的 NTP server 與  
#  cn.pool.ntp.org聯機時所花費的時間會記錄在 /etc/ntp/drift文件內 
server 0.pool.ntp.org

server 1.pool.ntp.org

server 2.pool.ntp.org

server cn.pool.ntp.org prefer

#其他設置值,以系統默認值即可

server  127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift
broadcastdelay  0.008
keys /etc/ntp/keys

總結一下,restrict用來設置訪問權限,server用來設置上層時間服務器,driftfile用來設置保存漂移時間的文件。

 

六.ntp服務的啓動與觀察

在啓動NTP服務前,先對提供服務的這臺主機手動的校正一次時間咯。(因爲啓動服務器,端口會被服務端佔用,就不能手動同步時間了)

[root@linux ~] # ntpdate cn.pool.ntp.org

25 Apr 14:33:51 ntpdate[8310]: step time server 80.85.129.2 offset 6.655976 sec

然後,啓動ntpd服務:

[root@linux ~] # service ntpd start

或 [root@linux ~] # /etc/init.d/ntpd start

查看端口:

[root@linux ~] # netstat -ln|grep 123

udp        0      0 192.168.228.153:123        0.0.0.0:*

udp        0      0 127.0.0.1:123               0.0.0.0:*

udp        0      0 0.0.0.0:123                  0.0.0.0:*

udp        0      0 :::123                       :::*

如何確認我們的NTP服務器已經更新了自己的時間呢?

[root@linux ~] # ntpstat

synchronized to NTP server(127.127.1.0) at stratum 11

time correct to within 950ms

polling server every 64 s

#改指令可列出NTP服務器是否與上層聯機。由上述輸出結果可知,時間校正約

#爲950*10(-6)秒。且每隔64秒會主動更新時間。

常見的錯誤:

25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found

其實,這不是一個錯誤。而是由於每次重啓NTP服務器之後大約要3-5分鐘客戶端才能與server建立正常的通訊連接。當此時用客戶端連接服務端就會報這樣的信息。一般等待幾分鐘就可以了。

[root@linux ~] # ntptrace –n 127.0.0.1

127.0.0.1:stratum 11, offset 0.000000,synch distance 0.950951

222.73.214.125:stratum 2,offset –0.000787,synch distance 0.108575

209.81.9.7:stratum 1,offset 0.000028,synch distance 0.00436,refid ‘GPS’

#這個指令可以列出目前NTP服務器(第一層)與上層NTP服務器(第二層)彼此之間的

#關係

[root@linux ~] # ntpq –p

指令“ntpq -p”可以列出目前我們的NTP與相關的上層NTP的狀態,以上的幾個字段的意義如下:

remote:即NTP主機的IP或主機名稱。注意最左邊的符號,如果由“+”則代表目前正在作用鐘的上層NTP,如果是“*”則表示也有連上線,不過是作爲次要聯機的NTP主機。

refid:參考的上一層NTP主機的地址

st:即stratum階層

when:幾秒前曾做過時間同步更新的操作

poll:下次更新在幾秒之後

reach:已經向上層NTP服務器要求更新的次數

delay:網絡傳輸過程鍾延遲的時間

offset:時間補償的結果

jitter:Linux系統時間與BIOS硬件時間的差異時間

 

    最後提及一點,ntp服務,默認只會同步系統時間。如果想要讓ntp同時同步硬件時間,可以設置/etc/sysconfig/ntpd 文件。

在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬件時間與系統時間一起同步。



---------------------------------------------------------------------------------------------------------------------------------------------------------------------

linux配置時間服務器(ntp)
2007-10-27 16:34

在linux下,我們可以通過自帶的NTP(Network Time Protocol)協議通過網絡使自己的系統保持精確的時間。可用的公共時間服務器列表可以從下面的地址獲取:

  http://ntp.isc.org/bin/view/Servers/NTPPoolServers

  NTP是用來使系統和一個精確的時間源保持時間同步的協議。建議大家在自己管理的網絡中建立至少一臺時間服務器來同步本地時間,這樣可以使得在不同的系統上處理和收集日誌和管理更加容易。

  介紹一下環境:179爲本地時間服務器,其他服務器和179同步。179和網上時間服務器同步。

  一、配置179時間服務器

  1、首先查詢NTP軟件版本

  rpm -qa|grep ntp

  ntp-4.1.2-4.EL3.1

  如果沒有可以從linux安裝盤上查找,安裝此ntp包

  2、編輯配置文件

  vi /etc/ntp.conf

  首先定義服務器

  server pool.ntp.org

  restrict default nomodify notrap noquery

  restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap #從192.168.0.1-192.168.0.254的服務器都可以使用我們的NTP服務器來同步時間。

  註釋掉以下一行

  #restrict default ignore

  3、啓動NTP服務器

  #chkconfig ntpd on

  #/etc/init.d/ntpd start

  #/etc/init.d/ntpd stop

  #/etc/init.d/ntpd restart

  默認情況下,我們配置的NTP服務器不會去時間源那裏同步時間,所以必須修改/etc/ntp/step-tickers文件,加入我們的時間源,這樣每次通過/etc/init.d/ntpd 來啓動服務的時候就會自動更新時間了

  檢查服務器同步狀態:

  ntpq -p

  ntptrace 192.168.0.179

  如果輸出正確,則說明時間服務器成功。每次啓動服務器,會自動同步時間。

  配置LINUX客戶端

  在linux客戶端上執行ntpdate ntp_server_ip 就可以根據時間服務器統一局域網的時間了,將上面的命令放到cron裏每天早上3點定期執行,crontab –e 然後輸入

  0 3 * * * /usr/sbin/ntpdate 192.168.0.179

爲什麼電腦要對時?因爲電腦自己的鐘不準。破電腦一天慢五分鐘也不奇怪。

對時需要對到什麼精度?一般家用的電腦時鐘誤差一分鐘完全可以接受。集羣服務器配合工作一般需要所有的時鐘同步在一秒之內。

和誰同步?一般是和世界各地的 NTP (Network Time Protocol)服務器同步的。米國標準時間由 NIST 發佈,NIST 提供了一些服務器。現代 Windows 操作系統自動和 time.windows.com 對時。Linux 下面一般用 NTPPool 來自動選擇服務器。中國國家授時中心 NTP 210.72.145.44 是中國權威時間。中國教育網有自己的 NTP 服務器網。如果是集羣服務器,一般會在內網配置幾個本地 NTP 服務器。

上面這麼多 NTP 服務器有沒有優劣呢?有的,但是對於一般的應用來說,看不出什麼區別。 理論上說,NTP 服務器是分等級(Stratum)的,Stratum = 1 的 NTP 服務器是直接和世界標準時鍾同步的,包括 GPS 時間、銫原子鐘、某些手機網絡等。NIST、中國國家授時中心和中國教育網的第一級時間服務器都是這個級別的。Stratum = 2 的 NTP 服務器是和 Stratum = 1 的服務器同步的,性能稍差,但精確度也在毫秒的量級,所以用起來沒什麼區別。再往下每同步一級,Stratum 就加一。

Windows 2000 開始包含了自動時間同步的服務。Windows XP 上,打開時間設置就有網絡對時的設置。默認是每星期和 time.windows.com 對時一次。這個一星期同步一次太長了,可以通過註冊表調整,或者用 Wits 修改。

Linux 下面的 ntpd 就要靈活多啦。默認配置一般足夠好用。下面在 Fedora 下舉個例子。配置:

# grep "^server" /etc/ntp.conf
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server pool.ntp.org
server   127.127.1.0 # local clock

啓動 ntpd 之後查看狀態

# ntpq -pn
      remote            refid       st t when poll reach    delay    offset   jitter
==============================================================================
 64.25.87.54      128.118.25.5      2 u    10    64    17    79.194   -542.89    1.942
 64.72.116.51     129.7.1.66        2 u     9    64    17    51.569   -532.23    1.803
 64.72.116.50     129.7.1.66        2 u    11    64    17    51.417   -516.70    1.417
 64.72.116.45     129.7.1.66        2 u     7    64    17    51.586   -532.36    1.135
*127.127.1.0      LOCAL(0)         10 l     3    64    17     0.000     0.000    0.001

st 這列顯示自動選的四個 NTP 服務器都是 Stratum = 2。最後一個是本地時鐘。前四行的 offset 顯示本地時鐘和四個 NTP 服務器都有大概 500 毫秒的差距。ntpstat 顯示目前只和本地時鐘同步:

# ntpstat
synchronised to local net at stratum 11
    time correct to within 949 ms
    polling server every 64 s

過一會再看:

# ntpq -pn
      remote            refid       st t when poll reach    delay    offset   jitter
==============================================================================
+64.25.87.54      128.118.25.5      2 u    56    64   377    78.548   250.871   37.180
+64.72.116.51     129.7.1.66        2 u    58    64   377    51.551   268.538   36.817
*64.72.116.50     129.7.1.66        2 u    58    64   377    51.539   274.497   36.629
+64.72.116.45     129.7.1.66        2 u    49    64   377    51.485   271.750   37.841
 127.127.1.0      LOCAL(0)         10 l    44    64   377     0.000     0.000    0.001
# ntpstat
synchronised to NTP server (64.72.116.50) at stratum 3
    time correct to within 263 ms
    polling server every 64 s

本地時鐘已經成功和外面的 NTP 服務器同步。ntpq 報告中第一列 * 表示目前選擇的主同步服務器,標 + 的表示有可能被用來進一步提高同步精度的次要服務器。因爲是和 Stratum = 2 的服務器同步,所以本地的 ntpd Stratum 就是 3 了。一個細節是 ntpq 對時鐘是慢慢調整的,而不是直接跳好多秒,這樣平滑的調整時間可以保證很多程序的流程平穩。不過,如果時鐘誤差過大,ntpd 可能會拒絕調整時間;或者有人也可能希望立刻調正時間,這樣的話可以直接執行命令:ntpdate -b pool.ntp.org(需要停掉 ntpd 服務執行)。

在我另一個服務器上,配置了好多 NTP 服務器:

# grep "^server" /etc/ntp.conf
server time-a.nist.gov
server time-b.nist.gov
server time.nist.gov
server time.windows.com
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server pool.ntp.org
server   127.127.1.0 # local clock
# ntpq -p
      remote            refid       st t when poll reach    delay    offset   jitter
==============================================================================
+time-a.nist.gov .ACTS.            1 u    61   128   377    76.113    -1.046    3.424
*time-b.nist.gov .ACTS.            1 u    65   128   377    81.063     0.398    1.892
-time.nist.gov    .ACTS.            1 u   251   128   356    38.911     1.353   30.226
-time.windows.co 18.26.4.105       2 u    45   128   267    31.218    13.180    6.039
-194.109.64.200   192.87.106.2      2 u   122   128   377   155.132     0.596   38.674
-a.mirror.fizzel 43.75.42.44       3 u    56   128   377   163.391   -11.756   13.006
-enfield.ikk.szt 195.111.99.186    2 u   118   128   377   188.326    -2.520   32.359
+ntp1.esat.net    .GPS.             1 u    59   128   377   161.103    -1.321    0.460
 LOCAL(0)         .LOCL.           10 l    48    64   377     0.000     0.000    0.001

標註 - 的是那些相對來說不太準的鍾(offset 或 jitter 偏大),自動被剔除了。從 delay 這裏可以看到,我這裏和 NIST 幾個鍾網絡延遲比較小(100 毫秒之內),一般這樣的鐘誤差小一些。倒數第二個 pool.ntp.org 選擇的是一個和 GPS 同步的鐘,Stratum = 1,是一個比較準的鍾了,只是網絡延遲稍大。同時可以看到 time.windows.com 的 Stratum = 2,在一年以前,它曾經是 6。堂堂國際大公司微軟也不花幾百塊錢買個 GPS 接收器建一個 Stratrum = 1 的時鐘服務器造福千千萬萬的 windows 用戶,真是不可理解。

最後,linux 下防火牆規則如果極嚴格的話可能會影響 ntpd 對時,打開 sport 123 即可(假設 OUTPUT 鏈全 ACCEPT):

iptables -I INPUT -p udp -m udp --sport 123 -j ACCEPT


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章