天天看點

linux時間同步 ,ntp ntpdate

在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

linux時間同步 ,ntp ntpdate

指令“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 下舉個例子。配置:

啟動 ntpd 之後檢視狀态

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

過一會再看:

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

在我另一個伺服器上,配置了好多 ntp 伺服器:

标注 - 的是那些相對來說不太準的鐘(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):

繼續閱讀