1. 程式人生 > >Linux時間同步ntpd和ntpdate的用法

Linux時間同步ntpd和ntpdate的用法

自從昨晚機器遷移,發現有好幾臺機器的時間並沒有同步到當前時間,都延遲了5個多小時,那麼此時就需要ntpdate或者nptd來同步時間

使用ntpd來同步時間

通常如果機器上的服務都已經執行一段時間並且需要同步時間的推薦使用ntpd來同步,因為ntpdate同步時間的時候會造成時間的跳躍,對一些依賴時間的程式和服務會造成影響。比如sleep,timer等。而且,ntpd服務可以在修正時間的同時,修正cpu tick。理想的做法為,在開機的時候,使用ntpdate強制同步時間,在其他時候使用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 的一種模式。

vim /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 172.21.68.2
server 172.21.68.3
server 1.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

使用ntpdate同步時間

用法:

ntpdate [-nv] [NTP IP/hostname]

例如:

ntpdate 172.21.68.2
ntpdate time.ntp.org

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

crontab -e # 編輯crontab
0 12 * * * * /usr/sbin/ntpdate 172.21.68.2

系統時間與硬體時間互相同步

把系統時間同步給硬體時間

clock --systohc (system clock to hardware clock)

把系統時間同步給硬體時間

clock --hctosys (hardware clock to system clock )