linux時間同步,ntpd、ntpdate 【轉】

在Windwos中,系統時間的設置很簡單,界面操做,通俗易懂。並且設置後,重啓,關機都不要緊。系統時間會自動保存在Bios的時鐘裏面,啓動計算機的時候,系統會自動在Bios裏面取硬件時間,以保證時間的不間斷。

    但在Linux下,默認狀況下,系統時間和硬件時間,並不會自動同步。在Linux運行過程當中,系統時間和硬件時間以異步的方式運行,互不干擾。硬件時間的運行,是靠Bios電池來維持,而系統時間,是用CPU tick來維持的。 html

    在系統開機的時候,會自動從Bios中取得硬件時間,設置爲系統時間。 linux

 

一.Linux系統時間的設置 ios

    在Linux中設置系統時間,能夠用date命令: windows

//查看時間 服務器

[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 ui

 

 二.Linux硬件時間的設置 spa

    硬件時間的設置,能夠用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 這樣,就可讓硬件時間與系統時間一塊兒同步。



---------------------------------------------------------------------------------------------------------------------------------------------------------------------

linux配置時間服務器(ntp)
2007-10-27 16:34

在linux下,咱們能夠經過自帶的NTP(Network Time Protocol)協議經過網絡使本身的系統保持精確的時間。可用的公共時間服務器列表能夠從下面的地址獲取:

  http://ntp.isc.org/bin/view/Servers/NTPPoolServers

  NTP是用來使系統和一個精確的時間源保持時間同步的協議。建議你們在本身管理的網絡中創建至少一臺時間服務器來同步本地時間,這樣可使得在不一樣的系統上處理和收集日誌和管理更加容易。

  介紹一下環境:179爲本地時間服務器,其餘服務器和179同步。179和網上時間服務器同步。

  1、配置179時間服務器

  一、首先查詢NTP軟件版本

  rpm -qa|grep ntp

  ntp-4.1.2-4.EL3.1

  若是沒有能夠從linux安裝盤上查找,安裝此ntp包

  二、編輯配置文件

  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

  三、啓動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 下舉個例子。配置:

# grep "^server" /etc/ntp.conf
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server pool.ntp.org
server   127.127.1.0 # local clock

啓動 ntpd 以後查看狀態

# ntpq -pn
      remote            refid       st t when poll reach    delay    offset   jitter
==============================================================================
 64.25.87.54      128.118.25.5      2 u    10    64    17    79.194   -542.89    1.942
 64.72.116.51     129.7.1.66        2 u     9    64    17    51.569   -532.23    1.803
 64.72.116.50     129.7.1.66        2 u    11    64    17    51.417   -516.70    1.417
 64.72.116.45     129.7.1.66        2 u     7    64    17    51.586   -532.36    1.135
*127.127.1.0      LOCAL(0)         10 l     3    64    17     0.000     0.000    0.001

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

# ntpstat
synchronised to local net at stratum 11
    time correct to within 949 ms
    polling server every 64 s

過一會再看:

# ntpq -pn
      remote            refid       st t when poll reach    delay    offset   jitter
==============================================================================
+64.25.87.54      128.118.25.5      2 u    56    64   377    78.548   250.871   37.180
+64.72.116.51     129.7.1.66        2 u    58    64   377    51.551   268.538   36.817
*64.72.116.50     129.7.1.66        2 u    58    64   377    51.539   274.497   36.629
+64.72.116.45     129.7.1.66        2 u    49    64   377    51.485   271.750   37.841
 127.127.1.0      LOCAL(0)         10 l    44    64   377     0.000     0.000    0.001
# ntpstat
synchronised to NTP server (64.72.116.50) at stratum 3
    time correct to within 263 ms
    polling server every 64 s

本地時鐘已經成功和外面的 NTP 服務器同步。ntpq 報告中第一列 * 表示目前選擇的主同步服務器,標 + 的表示有可能被用來進一步提升同步精度的次要服務器。由於是和 Stratum = 2 的服務器同步,因此本地的 ntpd Stratum 就是 3 了。一個細節是 ntpq 對時鐘是慢慢調整的,而不是直接跳好多秒,這樣平滑的調整時間能夠保證不少程序的流程平穩。不過,若是時鐘偏差過大,ntpd 可能會拒絕調整時間;或者有人也可能但願馬上調正時間,這樣的話能夠直接執行命令:ntpdate -b pool.ntp.org(須要停掉 ntpd 服務執行)。

在我另外一個服務器上,配置了好多 NTP 服務器:

# grep "^server" /etc/ntp.conf
server time-a.nist.gov
server time-b.nist.gov
server time.nist.gov
server time.windows.com
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server pool.ntp.org
server   127.127.1.0 # local clock
# ntpq -p
      remote            refid       st t when poll reach    delay    offset   jitter
==============================================================================
+time-a.nist.gov .ACTS.            1 u    61   128   377    76.113    -1.046    3.424
*time-b.nist.gov .ACTS.            1 u    65   128   377    81.063     0.398    1.892
-time.nist.gov    .ACTS.            1 u   251   128   356    38.911     1.353   30.226
-time.windows.co 18.26.4.105       2 u    45   128   267    31.218    13.180    6.039
-194.109.64.200   192.87.106.2      2 u   122   128   377   155.132     0.596   38.674
-a.mirror.fizzel 43.75.42.44       3 u    56   128   377   163.391   -11.756   13.006
-enfield.ikk.szt 195.111.99.186    2 u   118   128   377   188.326    -2.520   32.359
+ntp1.esat.net    .GPS.             1 u    59   128   377   161.103    -1.321    0.460
 LOCAL(0)         .LOCL.           10 l    48    64   377     0.000     0.000    0.001

標註 - 的是那些相對來講不太準的鍾(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):

iptables -I INPUT -p udp -m udp --sport 123 -j ACCEPT
相關文章
相關標籤/搜索