Linux時間設置筆記

想象一下你有一臺服務器,上面運行者一個IRC服務,假設在服務器10:00的時候管理員封禁一名不文明用語的,1小時內不容許他發言。然後忽然發現服務器時間快了10分鐘,而後改過來。10:00-9:50 = -10分鐘,呵呵? 假設程序判斷邏輯時這樣的:程序員

unsigned int left = now - (member->start_time);
if (left >= 60)  
    release(member);

若是按上面改了時間那種狀況:那名參與者的會忽然發現本身能發言了,因而IRC就被不和諧言論淹沒了。。。。windows

固然,負責任的程序員會考慮到程序的魯棒性,儘量防止時間異常致使的各類問題,但也架不住每天加班,身心憔悴,一不當心。並且如今網絡的許多服務都嚴重依賴於時間的正確性,你不可能讓全部程序都能正確處理時間異常問題。服務器

若是服務器時間發生問題,不能簡單粗暴的調整,而應該校訂

  1. 關於UTC

協調世界時(英:Universal Time Coordinated ,法:Temps Universel Coordonné),又稱世界統一時間,世界標準時間,國際協調時間。英文(CUT)和法文(TUC)的縮寫不一樣,做爲妥協,簡稱UTC。網絡

安裝過Linux和Windows雙系統的都知道,設置時間的時候會讓你選擇UTC仍是localtime,選擇UTC的通常都會快幾個小時(好比我)。這是由於windows和Linux對於UTC時間處理機制不同的關係: Linux與Windows不一樣之處是Linux把世界時間(UTC)做爲BIOS時間,本地時間(Local Time)是用戶所在時區與國際時間的差值,而Windows中直接把本地時間做爲BIOS時間。在多操做系統環境下這種不一樣的時間機制將使時間沒法正確顯示。結決方法是:/etc/default/rcS把其中的UTC=yes改成UTC=no,也就是不把硬件時鐘當成UTC時間。函數

  1. 使用ntpd而不是ntpdate 關於NTP的內容能夠參考wiki百科。NTP
    簡單的說:NTP(Network Time Protocol,aka 網絡時間協議)是一種以數據包交換把兩臺電腦的時鐘同步化的網絡協議。NTP使用UDP端口123做爲傳輸層。它是用做抵銷可變延遲的影響。

當時間發生錯誤的時候,我之前通常就直接ntpdate serverIP,但這樣會形成時間的躍變,發生上面哪一種狀況。 而應該配置ntpd服務,若是你使用Debian,那麼直接sudo apt-get install ntp,系統會自動安裝配置ntp服務,注意ntp更新的依據是你的市區,請使用 sudo dpkg-reconfigure tzdata配置好你的時區。操作系統

PS: 對於時間相差比較大的時候,例如差了好幾個小時,ntpd就整不了,由於ntpd是一種漸變式的時間校訂,若是時間相差過大,雖然不會像ntpdate那樣致使時間跳躍致使崩潰,但漸變校訂須要時間,多是服務器長期處於數據混亂狀態,還不以下線。這時候通常就是下線服務使用ntpdate調整以後在上線。 PS2:對於ntp客戶端,若是你本身搭建了時間服務器,能夠在客戶端的/etc/ntp.conf設置服務。設計

  1. 硬件時鐘和系統時鐘

在Linux中有硬件時鐘與系統時鐘等兩種時鐘。硬件時鐘是指主機板上的時鐘設備,也就是一般可在BIOS畫面設定的時鐘。系統時鐘則是指kernel中的時鐘。當Linux啓動時,系統時鐘會去讀取硬件時鐘的設定,以後系統時鐘即獨立運做。全部Linux相關指令與函數都是讀取系統時鐘的設定。code

這樣設計的好處時能夠臨時更改系統的時間以達到某種目的,例如一臺在北京的服務器但願與在美國的服務器同步數據(例如做爲Debian的APT服務器),而數據則是根據時間戳來判斷的,這時候就能夠將時間暫時調整爲美國時間,更新完畢後在使用hwclock獲取硬件時鐘,改回來便可。此外若是遠程時間服務器異常,也可使用hwclock暫時更改。server

Linux內核會牢牢跟蹤硬件時鐘。在啓動時,Linux會依據硬件時間設置本身的系統時間。設置成功以後,兩個時鐘相互獨立運行。若是要將系統時間同步到硬件時鐘,執行:hwclock --set --date="2011-08-14 16:45:05",若是你但願直接使用utc或者localtime,使用hwclock --set --utc或者hwclock --set --localtime。注意hwclock須要root權限,並且不會提示Orz。ip

相關文章
相關標籤/搜索