linux時間同步,ntpd、ntpdate

一.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 這樣,就可以讓硬件時間與系統時間一起同步。

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