1. 程式人生 > >使用ntpdate更新系統時間

使用ntpdate更新系統時間

ntpd、ntpdate的區別

使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什麼區別。ntpd不僅僅是時間同步伺服器,他還可以做客戶端與標準時間伺服器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時執行。

時鐘的躍變,對於某些程式會導致很嚴重的問題。許多應用程式依賴連續的時鐘——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如資料庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之後,ntpdate使用settimeofday(2)設定系統時間,這有幾個非常明顯的問題:

第一,這樣做不安全。ntpdate的設定依賴於ntp伺服器的安全性,攻擊者可以利用一些軟體設計上的缺陷,拿下ntp伺服器並令與其同步的伺服器執行某些消耗性的任務。由於ntpdate採用的方式是跳變,跟隨它的伺服器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以伺服器為準)。

第二,這樣做不精確。一旦ntp伺服器宕機,跟隨它的伺服器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。

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

因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其餘的時候,理想的做法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。

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

ntp的移植

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比較簡單。格式如下:

[[email protected] ~]# ntpdate [-nv] [NTP IP/hostname]
[[email protected] ~]# ntpdate 192.168.0.2
[[email protected] ~]# 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服務前,先對提供服務的這臺主機手動的校正一次時間咯。(因為啟動伺服器,埠會被服務端佔用,就不能手動同步時間了)

[[email protected] ~] # ntpdate cn.pool.ntp.org

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

然後,啟動ntpd服務:

 [[email protected] ~] # /etc/init.d/ntp start /restart

檢視埠:

[[email protected] ~] # 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

[[email protected] ~] # 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

[[email protected] ~] # 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 這樣,就可以讓硬體時間與系統時間一起同步。


相關推薦

使用ntpdate更新系統時間

ntpd、ntpdate的區別 使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什麼區別。ntpd不僅僅是時間同步伺服器,他還可以做客戶端與標準時間伺服器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不

Linux更新系統時間

set 系統 san 0.11 nds highlight 更新 cto con 一、系統時間   1.查看系統時間 [root@sansan ~]# date Tue Dec 5 16:06:18 CST 2017   2.設置系統時間 [root@sansa

CentOS 7 檢視系統時間更新系統時間

一、檢視系統時間、硬體時間 # date // 檢視系統時間 #hwclock // 檢視硬體時間 二、時間伺服器上的時間同步的方法 安裝ntpdate工具 # yum -y

Debian更新系統時間

Debian更新時間 A 更新源,並安裝ntpdate: 0.date 檢視當前的系統時間 1.sudo apt-get update 更新源 2.sudo apt-get insta

如何更新centos的系統時間

如果你的伺服器是centos,你登陸輸入date之後發現時間並不是當前的中國時間。 那麼怎麼同步時間到中國呢? cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 然後 ntpdate us.pool.

Linux系統時間和RTC時間、時鐘設定與同步、ntpd服務/ntpdate

Linux有兩個時間,一個是系統時間,一個是RTC時間(也叫硬體時間)。Linux系統啟動時,會自動獲取硬體時間,設定為系統時間。一、查詢系統時間:查詢系統時間:date查詢/設定硬體時間:       hwclock –r        顯示硬體時鐘與日期       hw

centos系統時間同步更新

伺服器系統時間更新: yum install -y ntpdate ntpdate time.windows.com 修改時區:  找到相應的時區檔案 /usr/share/zoneinfo/Asia/Shanghai替換當前的/etc/localtime。  修改/e

jsp頁面中,動態調用系統時間的實現

簡單 char ext fonts get har interval sso 星期 在做WEB項目時,經常會須要 在頁面中顯示當前時間,以下介紹一個簡單的調用系統時間的方法,效果如圖: 在頁面中插入以下代碼即可了 <div id="time"&

Java_中快速獲取系統時間

獲取 獲取系統時間 java strong long sta align lis 快速 直接調用System的currentTimeMillis()即可! long start = System.currentTimeMillis(); System.out.println

Linux修改系統時間

ive etc cal 記得 設置時間 har this 兩個 格式 本文轉摘自『IT學習者』http://www.t086.com/article/4386 修改linux的時間可以使用date指令 修改日期: 時間設定成2009年5月10日的命令如下: #date

調用系統時間

pause oca printf pri clas div 系統時間 logs lib VS中編譯通過: #include<stdio.h> #include<stdlib.h> #include<time.h> int main()

crontab執行時間系統時間不一致

google 服務器 shanghai share crontab執行時間和系統時間不一致

改動android 系統時間

nbsp pop -m andro shel content data popu 命令 命令如 date -s "yyyymmdd.[[[hh]mm]ss]" 直接在CRT上執行,舉例:date -s "20120801.120503" 但在adb shell下

CentOS修改系統時間

.com href www 操作 ron 指向 usr linu set 操作: 1 2 date –s ‘1987-05-02 10:10:10‘ clock –w //將日期寫入CMOS 補充: 修改Linux時間一般涉及到3個命令:

VM虛擬機系統時間同步網絡時間並登錄用戶自動校正時間

linux系統時間同步VM虛擬機大家都用,我在用完後,經常使用“掛起客戶機”,但是這樣一來,系統恢復啟動很快,但是少了正常的系統自檢,包括和網絡同步時間。今天在虛擬機上測試“find /root/Text -mtime +3 -name "Service.log.*" -exec rm -f {} \;”,總

mysql 數據庫中根據當前系統時間,取前後幾秒、幾分鐘、幾小時、幾天

() ubd mysql second int 宋體 ffffff tex 時間 取時間: select current_timestamp; 輸出:2016-06-16 16:12:52 select now(); 輸出:2016-06-16 16:12:52 s

ubuntu16和win10雙系統時間不對

ubuntu16和win10雙系統時間不對在網上搜索後得知ubuntu用的utc,win10用的rtc解決方法執行下面的命令:$ sudo timedatectl set-local-rtc true 本文出自 “趙東偉的博客” 博客,請務必保留此出處http://zhaodongwei.blog.51cto

tomcat和系統時間不一致的問題

tomcat修改如下文件,增加環境變量:cd /usr/local/tomcat8.0vim bin/catalina.shexport JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/shanghai"本文出自 “一萬年太久,只爭朝夕” 博客,請務必保留此出處http:

linux系統時間和時區與internet時間同步

linux 時間 時區 同步問題如此圖紅色區域# /usr/sbin/ntpdate time.nist.gov //手動同步時間後,發現與網絡時間還是不不對# vi /etc/sysconfig/clock //發現是new_york,ZONE="America/New_Yo

獲取系統時間的DOS命令

當前系統時間 獲取 記錄 現在 其中 txt 非法字符 系統時間 user DOS C:\Users\yaozhendong>echo %date:~0,10% %time%2011/12/24 19:45:41.25 前段時間工作中需要對一個地址做定時PING操