使用ntpdate更新系統時間

ntpd、ntpdate的區別 linux

使用以前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什麼區別。ntpd不只僅是時間同步服務器,他還能夠作客戶端與標準時間服務器進行同步時間,並且是平滑同步,並不是ntpdate當即同步,在生產環境中慎用ntpdate,也正如此二者不可同時運行。 數據庫

時鐘的躍變,對於某些程序會致使很嚴重的問題。許多應用程序依賴連續的時鐘——畢竟,這是一項常見的假定,即,取得的時 間是線性的,一些操做,例如數據庫事務,一般會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是咱們所說的」躍變「:在 得到一個時間以後,ntpdate使用settimeofday(2)設置系統時間,這有幾個很是明顯的問題: 安全

第一,這樣作不安全。ntpdate的設 置依賴於ntp服務器的安全性,攻擊者能夠利用一些軟件設計上的缺陷,拿下ntp服務器並令與其同步的服務器執行某些消耗性的任務。因爲ntpdate採 用的方式是跳變,跟隨它的服務器沒法知道是否發生了異常(時間不同的時候,惟一的辦法是以服務器爲準)。 服務器

第二,這樣作不精確。一旦ntp服務器宕機,跟隨它的服務器也就會沒法同步時間。與此不一樣,ntpd不只可以校準計算機的時間,並且可以校準計算機的時鐘。 網絡

第三,這樣作不夠優雅。因爲是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,若是ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。 tcp

於是,惟一一個能夠令時間發生跳變的點,是計算機剛剛啓動,但尚未啓動不少服務的那個時候。其他的時候,理想的作法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。 ui

NTPD 在和時間服務器的同步過程當中,會把 BIOS 計時器的振盪頻率誤差——或者說 Local Clock 的天然漂移(drift)——記錄下來。這樣即便網絡有問題,本機仍然能維持一個至關精確的走時。 spa

 

ntp的移植 .net

1)   ./configure --prefix=YOUR_INSTALL_DIRECTORY--host=arm-linux 設計

2)   make

3)   make install

 

 

ntp的使用

1)  在客戶端上vi /etc/services 增長兩行:

ntp          123/tcp

ntp          123/udp

 

2)  若是客戶端/etc目錄下沒有localtime文件,將服務器上/etc目錄下的localtime文件複製到客戶端的/etc目錄下

3)    打開時間服務器(假設其IP地址爲192.168.1.11)上的ntp進程

/etc/init.d/ntp start

 

4)    客戶端開始更新時間

ntpdate 192.168.1.11

注意:

l  若是重啓ntp守護進程後,開發板有可能沒法當即更新時間,提示錯誤「no server suitable for synchronization found」,這是由於每次重啓NTP服務器以後大約要3-5分鐘客戶端才能與服務器創建正常的通信鏈接,等待一下子再更新就能夠了。

l  有可能防火牆會阻礙更新時間,這時能夠加上「-u」參數。

 

 

ntp的配置

這方面的文章網上有不少,講的也很詳細,主要就是修改/etc/init.d/ntp.conf文件,我稍做了修改,加了兩行:

server 210.72.145.44

server cn.pool.ntp.org

以後我就能夠同步時間了,有人加了這麼一行

restrict 192.168.1.1mask 255.255.255.0 nomodify

我沒有加,但依然成功,看了下配置文件有這第一行

restrict ::1

可能這一行就包含那一行的意思吧!僅僅是猜想。下面給出一個樣本加註釋,僅供參考:

# 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     # localclock

fudge   127.127.1.0 stratum 10

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

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

 

 

不一樣機器之間的時間同步

     爲了不主機時間由於長期運做下所致使的時間誤差,進行時間同步(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 有一個自我保護設置: 若是本機與上源時間相差太大, 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:系統時區文件

  

 

ntp服務的啓動與觀察

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

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

25 Apr 14:33:51 ntpdate[8310]: step time server80.85.129.2 offset 6.655976 sec

而後,啓動ntpd服務:

 [root@linux ~] # /etc/init.d/ntp start /restart

查看端口:

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

udp       0      0192.168.228.153:123        0.0.0.0:*

udp       0      0127.0.0.1:123              0.0.0.0:*

udp       0      00.0.0.0:123                 0.0.0.0:*

udp       0      0:::123                      :::*

 

 

ntptrace

[root@linux ~] # ntptrace –n 127.0.0.1

127.0.0.1:stratum 11, offset 0.000000,synch distance0.950951

222.73.214.125:stratum 2,offset –0.000787,synch distance0.108575

209.81.9.7:stratum 1,offset 0.000028,synch distance0.00436,refid ‘GPS’

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

#關係

 

 

ntpq

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

相關文章
相關標籤/搜索