同步ubuntu系統時間(ntpdate命令 同步 # sudo ntpdate 0.ubuntu.pool.ntp.org 寫入 # sudo hwclock -w )

Original url:

https://www.cnblogs.com/ajianbeyourself/p/4189520.html

閱讀目錄

      注:以Ubuntu爲例說明

      在Linux計算機上,有兩個時間,一個是硬件時間(BIOS中記錄的時間,稱爲hwclock),另一個是操作系統時間(osclock)。硬件時鐘由BIOS電池供電,

當計算機關機後,會繼續運行,BIOS電池一般可使用幾年,如果沒電了,那BIOS中的數據會恢復出廠設置。

回到頂部

1. 硬件時間

      時間是有時區的,無論硬件時間還是操作系統時間。hwclock的時區在/etc/default/rcS文件中設置,裏面有一個參數UTC,默認值爲True,表示使用UTC時

區,如果設置爲no,那表示使用osclock的時區。建議hwclock與osclock設置相同的時區。注:由於我的osclock也是UTC時間,所以這裏UTC=yes還是

UTC=no都是一樣的。

# assume that the BIOS clock is set to UTC time (recommended)
UTC=yes

 

查看硬件時間

njsqrt3@test:~$ sudo hwclock -r
Sun 28 Dec 2014 05:20:56 AM UTC  -1.044336 seconds
njsqrt3@test:~$

 

將osclock寫入hwclock

zhj@test:~$ sudo hwclock -w
zhj@test:~$

 

回到頂部

2.操作系統時間

osclock的時區配置文件爲/etc/timezone,如果你想修改,那最好使用sudo dpkg-reconfigure tzdata來修改時區,不建議直接修改/etc/timezone文件,

如果你想修改爲UTC時間,那執行sudo dpkg-reconfigure tzdata命令時,選擇None of the above->UTC 即可

zhj@test:~$ cat /etc/timezone
Etc/UTC
zhj@test:~$

 

查看osclock

zhj@test:~$ date
Sun Dec 28 05:21:11 UTC 2014
zhj@test:~$

 

修改osclock

#修改時/分/秒
sudo date -s hh:mm:ss

#修改年/月/日
sudo date -s MM/DD/YY

 

      我們一般會使用ntp同步osclock,這一點是非常重要的,無論你是單臺主機還是集羣,你要保證你的時間必須與國際原子時同步,如果你不同步,那你主機的時

間與國際原子時相差幾秒甚至幾分鐘都是有可能的,想象一下,如果新浪微博的服務器沒有同步時間,假設當前國際原子時間爲2014-12-28T14:20:00Z,而新

浪微博服務器的時間爲1989-06-04T10:00:00Z,那我發的微博就穿越了到了1989年6月4日,那天在天安門發生了大動亂,如果新浪微博的應用服務器集羣之間

也沒有時間同步,假定server1爲2014-12-28T09:00:00Z,server2爲2014-12-27T09:00:00Z,兩者相差一天。我發微博時用的是server1,我的一個朋

友評論了我的微博,評論使用的是server2,這他媽奇蹟就出現了,他的評論時間比我發微博的時間還早。

      如果是單臺主機,那我們的主機當ntp客戶端就行了,找一個ntp服務器(如0.ubuntu.pool.ntp.org)直接使用ntpdate命令就可以同步,一般我們將它做成

cron定時任務,該任務將osclock與國際原子時同步後,還要將osclock寫入hwclock(後面會講爲何將osclock刷入hwclock)。那如果是集羣呢?我們一般是將其

中一臺主機做成ntp服務器,安裝ntpd軟件(該軟件就叫ntp,爲了與ntp協議區分,這裏用它的守護進程名ntpd代替),通過sudoapt-get install ntp安裝,這

個軟件既可以做服務端也可以做客戶端。做爲客戶端,它從上層的ntp server那裏獲取到國際原子時;做爲服務端,它爲集羣內中的客戶機提供國際原子時

間。這樣做可以節約外網網絡帶寬。

注:ntpd軟件與ntpdate軟件不能同時運行。對於集羣中的ntp server服務器,要安裝ntpd,配置好ntpd後,它會自動定時同步上層ntp server的時間到

osclock,不過它沒有寫入hwclock的配置項,所以我們還要手動在cron添加定時任務,將osclock寫入hwclock。對於集羣中的客戶機,編寫cron任務,用

ntpdate命令(一般的,在安裝好Ubuntu後,就有該命令了)從集羣ntp server的那裏獲取標準時間,更新osclock,同時更新後,也要將osclock寫入hwclock。

 

回到頂部

3.硬件時間與操作系統時間的交互

下面說一下硬件時間與操作系統時間的交互流程

1、開機時,操作系統從BIOS中讀取硬件時間+時區,然後根據osclock的時區,轉換爲對應的時間。然後操作系統時間與硬件時間就獨立運行,相互不影響,我們

通過應用程序獲取的時間用的都是操作系統時間。這一步是開機時os自動完成的。

2、主機運行過程中,通過ntp保證osclock與國際原子時同步,再將osclock同步到hwclock。這一步需要自己配置實現

3、關機時,osclock寫入hwclock。這一步是關機時os自動完成的。不過我們要考慮異常關機的情況,當異常關機時,osclock可能沒有寫入hwclock,這就是爲什

麼在第2步中將osclock定時刷入hwclock的原因。如果不定時刷入,那osclock與hwclock差距比較大時,若異常關機,osclock就丟掉了,再開機時,osclock就是

錯誤的,在第一個ntp同步到來時,osclock就一直是錯誤的。而且如果使用的是ntpd,ntpd是漸進調整,要經過多個ntp同步週期後纔會將osclock調整爲國際原子

時,另外,如果osclock與ntp server的時間差超過1000秒,那ntp server就不會更新osclock了。(別,如果你安裝了Ubuntu GUI,並設置了

System Settings->Time&Date->Automatically from the Internet,那它會自動同步時間)

 

回到頂部

4、ntpd與ntpdate

      參見https://help.ubuntu.com/10.04/serverguide/NTP.html

      ntpd當發現ntp client與ntp server時間不相同時,使用漸進同步,如果ntp server與client之間的差距超過1000秒,那就直接不同步了;ntpdate是躍遷式

同步,一步到位。ntpd與ntpdate是不能同時運行的,如下,在ntpd運行的情況下,執行ntpdate時會出錯。ntpd和ntpdate使用的都是123號端口,然後我們把

ntpd停掉,再執行ntpdate,就可以了。

zhj@test:~$ sudo ntpdate 0.ubuntu.pool.ntp.org
28 Dec 07:47:40 ntpdate[5857]: the NTP socket is in use, exiting
zhj@test:~$

 

複製代碼

zhj@test:~$ sudo service ntp stop
 * Stopping NTP server ntpd                                                                                    [ OK ]
zhj@test:~$ date
Sun Dec 28 07:52:37 UTC 2014
zhj@test:~$ sudo ntpdate 0.ubuntu.pool.ntp.org
28 Dec 07:52:50 ntpdate[5891]: adjust time server 202.112.31.197 offset 0.018119 sec
zhj@test:~$

複製代碼

 

      一般的,在集羣的ntp server主機上,考慮到該主機時間與國際原子時可能超過1000秒,一般先停止ntpd,然後用ntpdate同步一下時間,然後再開啓ntpd

服務,自動定時同步。而集羣中的ntp客戶機,就在cron定時執行ntpdate和hwclock -w任務就行了。當然,如果你不嫌麻煩,也可以在客戶機上安裝ntpd服務,

前面我們提到ntpd既可以做服務端,又可以做客戶端,這個在ntpd的配置文件/etc/ntp.conf中配置一下就行,restrict項只保留默認的下面四項即可,其它

restrict項註釋掉,另外,你還是要在cron中設置定時任務hwclock -w

複製代碼

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

複製代碼

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