linux夏令時
❶ linux修改時區時間命令
. 前言
如果你想修改Linux系統里的時間,本文合適你。Linux上有多種修改時間的命令工具,本文介紹最常用、最通用的方法。
linux修改時間
先來了解世界時間的標准,包括GMT、UTC、CST、DST、以及操作系統同步時間的方式
1.1 UTC
整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated)。
1.2 GMT
格林威治標准時間 (Greenwich Mean Time)指位於英國倫敦郊區的皇家格林尼治天文台的標准時間,因為本初子午線被定義在通過那裡的經線。
UT(世界時)和GMT(格林威治標准時)是相同的時間標准,都是基於天體觀察的。
UT 是相同標準的「科學」名稱。GMT:格林威治時間,是標準的「民間」名稱。
因此,格林威治標准時(GMT)和世界時 (UT) 是相等的。
UTC是我們現在用的時間標准,GMT是老的時間計量標准。UTC是根據原子鍾來計算時間,而GMT是根據地球的自轉和公轉來計算時間,也就是太陽每天經過位於英國倫敦郊區的皇家格林威治天文台的時間就是中午12點。由於現在世界上最精確的原子鍾50億年才會誤差1秒,可以說非常精確。而GMT因為是根據地球的轉動來計算時間的,而地球的自轉正在緩速變慢,所以使用GMT的話,會不太精準,一般情況那感覺不到差異,但是UTC更加科學和精確。
1.3 CST
中國標准時間 (China Standard Time)
1.4 DST
夏令時(Daylight Saving Time) 指在夏天太陽升起的比較早時,將時鍾撥快一小時,以提早日光的使用。(中國不使用)
我們需要知道的是:
GMT + 8 = UTC + 8 = CST
1.5 操作系統時間
以Linux為例,其實Windows或者其他操作系統也是類似的。
Linux時間有兩個時間:
Wall Time:系統時間,該時間由系統維護,可以是臨時,也可以是網路上同步回來的,也可以是從硬體讀取出來的,前提條件是系統服務正常運行,如果系統關機了,那就不存在Wall Time
RTC Time:RTC(Real-Time Clock)或CMOS時間,即硬體時間,你可以理解為主板BIOS在一聲聲哀嚎聲中,數學老師帶著一摞試捲走了進來。
好像是因為冬天天冷,體育老師凍感冒了。
所以變成了兩節數學課,順便考個試。
數學老師名叫歐島,一個很富有數學氣息的名字,常年帶著一個黑框眼睛。
卷子陸續分發。
作為一個學渣,蘇牧無奈的拿出了數學參考資料,想碰碰運氣看能不能找到原題。
「叮!查看了數學題目,數學積分+1,當前積分1/100,等級:一級」
突然,從腦海中冒出來的聲音,將他嚇了一大跳,差點沒從凳子上滑落下來。
一旁的同桌顏小珂忍住沒有笑場。
歐島則是狠狠的瞪了蘇牧一眼。
「???…」
蘇牧瞪大了眼睛,有些不可置信。
「這是什麼鬼東西?這是系統??居然真的有系統這種東西?」
蘇牧繼續翻動,又出現了同樣的聲響。
「叮!您查看了數學題目,數學積分+1,當前積分2/100,等級:一級」
他只是瞟了一眼,居然就增加了積分?
蘇牧覺得自己的腦子清明了些。
這些陌生的數學題目,似乎看起來也熟悉了幾分。
他越發的激動起來。
這些都是真正出現在他眼前的變化!
蘇牧翻書的動作越來越快,積分也越來越多,直到歐島走過來站到了他的面前,才反應過來迅速收了回去。
這個時候,他的積分已經達到了81/100。
他並沒有慌張,而是繼續將試卷上的題目查看了一遍。
終於,系統迎來了新的提示音。
「叮,您的數學積分已經足夠,等級:二級,當前積分0/1000!」
這一瞬間,蘇牧彷彿像醍醐灌頂一般,曾經那些陌生的數學題,彷彿變成了多年的好友!
他居然!
看懂了!
看懂了!!
居然看懂了!!
蘇牧的內心頓時內流滿面,頗有苦盡甘來的感覺。
彷彿是要檢驗自己的成果,蘇牧的心思完全沉寂在了試卷之中,這是一個學渣對於知識的渴望。
時間一點一滴的過去,就連蘇牧自己都沒有發現。
可惜的是,雖然他的數學已經達到了二級,但還是有些題目沒辦法運算出來。
「叮…..」
這一次不是系統的提示音,而是下課的鈴聲。
蘇牧真的是頭一次感受到了時間過的如此之快。
曾經漫長的兩個小時,現在居然還讓他有些意猶未盡。
這就是學霸的感覺嗎?他默默的想到。
這張試卷,蘇牧覺得自己應該是103分。
因為不會的題目他都空著。
而那些簡單一點的題目,蘇牧有一種迷之自信。
他得出的答案,一定是正確答案!
……
「我要好好學習了。」
強忍住內心的激動,蘇牧擺正了
❷ 修改linux 單板時間怎麼設置是夏令時內的時間點
機器里有兩個時鍾。硬體時鍾從根本上講是CMOS時鍾;而系統時鍾是由內核維護的,它是從1969年末(即傳說中的標志Unix時代開端的那個拂曉)開始算起的累積秒數。在DOS或Mac系統中,起作用的是硬體時鍾。遺憾的是,你可能已經發現了,絕大多數電腦時鍾都是很不準確的。它們從根本上講是由小型電池供電的警報器時鍾,這種鋰電池一般可持續供電三年左右,那時候你系統各大塊差不多都已經過時了。而在Linux系統中,起作用的是系統時鍾。在啟動時,它靠讀取硬體時鍾獲得計時起點,而不是靠記憶計時。你可以通過BIOS修改系統硬體時鍾,或者如果你不想重起機器,那就用hwclock命令。比較酷的一點是,當你使用hwclock命令調整硬體時間很多次以後,hwclock就會獲取你的時鍾推移速率,然後就會把這個信息存在/etc/adjtime里邊。以後,你就可以用它來隨時更新你的硬體時間,用一條下面的命令: hwclock --adjust 硬體時鍾通常被設置成全球標准時間(UTC),而將時區信息保存在/usr/share/lib/timezone (或者在某些系統中可能是/usr/local/timezone)目錄下某個適當的文件中,然後用一個符號鏈接文件/etc/localtime指向它。查看硬體時鍾用命令: hwclock --show 重置硬體時鍾用: hwclock --set --date="1/23/01 22:16:59" 如果需要修改你的時區信息,可以使用tzset命令,如果你系統中沒有這條命令,那可以用類似下面的操作: ln -s /etc/localtime /usr/share/zoneinfo/US/Pacific 要掌握linux的時間操作還有很多東西需要了解,包括用來創建實時時鍾文件(/dev/rtc)的內核選項、在內核或TZ時區表中設置時區信息的方法、網路時間伺服器功能和夏令時等等。
❸ Linux 系統中的 UTC 時間是夏令時嗎
UTC 當然不是 夏令時
UTC是物理時區
夏令時是行政命令
你還不如問CST和UTC+8有什麼區別呢
❹ Linux夏令時是怎麼調整的
linux本身沒有這個設置,你直接設定時區就可以了
❺ linux 時區設置 cst 什麼時區
1)
找到相應的時區文件
/usr/share/zoneinfo/asia/shanghai
用這個文件替換當前的/etc/localtime文件。
2)
修改/etc/sysconfig/clock文件,修改為:
zone="asia/shanghai"
[color=red]utc=true[/color]
arc=false
3)
時間設定成2005年8月30日的命令如下:
#date
-s
08/30/2005
將系統時間設定成下午6點40分0秒的命令如下。
#date
-s
18:40:00
4)
同步bios時鍾,強制把系統時間寫入cmos,命令如下:
#clock
-w
5)重啟apache。
參考資料二、
本文檔解釋了如何從linux下設置計算機的時鍾,如何設置您的時區和其它與linux如何保存時間相關的材料。
您的計算機有兩個時鍾,一個是始終運行的、由電池供電的(
硬體的、bios或cmos
)時鍾,另一個是由運行在您的計算機上的操作系統維護的(
系統
)時鍾。硬體時鍾通常只在操作系統啟動時用來設置系統時鍾,然後直到重啟或關閉系統,由系統時鍾來記錄時間。在linux
系統中,您可以選擇用utc/gmt
時間或本地時間來記錄硬體時鍾。推薦的選項是用utc
記錄,因為夏令時可以自動記錄。使用utc
記錄硬體時鍾的唯一不足是,如果您使用雙系統,其它操作系統,如dos
要求硬體時鍾用本地時間設置,那麼在那個操作系統里時間將是錯誤的。
設置時區:
linux
下的時區是通過建立從/etc/localtime[1]
到/usr/share/zoneinfo
[2]
目錄下與您所在時區相符的文件的符號鏈結實現的。例如,由於我在南澳大利亞,/etc/localtime就是到
/usr/share/zoneinfo/australia/south的符號鏈結。要建立這個鏈結,運行:
ln
-sf
../usr/share/zoneinfo/your/zone
/etc/localtime
替換your/zone
為形如australia/nsw或australia/perth
的文件。看看/usr/share/zoneinfo目錄都有什麼時區。
[1]
這里假設/usr/share/zoneinfo
是到/etc/localtime
的鏈結的前提是redhat
linux
[2]
在舊版本的系統里,您會發現使用/usr/lib/zoneinfo而不是/usr/share/zoneinfo。參考後面「一些應用程序中時間錯誤」。
❻ 如何解決linux和windows雙系統的時間同步問題
1、首先進入windows,使用regedit寫入DWORD值(設置成十六進制"1"):
HKEY_LOCAL_ersal
2、XP
和
Windows
Vista
SP1
支持設置系統時間標准為UTC,但是休眠待機的時候會把系統重新設置為
localtime,這是一個bug。推薦這些操作系統設置為
localtime;
3、如果
Windows
要求根據夏令時更新時鍾,可以允許。時鍾仍然是
UTC,僅是顯示時間會改變;
4、設置時間標准後需要重新設置硬體時間和系統時間,最好禁用Windows的時間同步功能,否則硬體時間可能混亂。
❼ 如何在linux下 使用java代碼正確獲取夏令時的時間
一:環境搭建
OpenOffice 下載地址http://www.openoffice.org/JodConverter
下載地址http://sourceforge.net/projects/jodconverter/files/JODConverter/
解壓後將目錄下的所有jar包放在工程的lib下面或者採用引用的方式調用這些jar包。
下載後安裝,我安裝的路徑為D:/openOffice/install/
二:啟動服務
可以通過cmd調用服務, " cd D:/openOffice/install/program"
執行
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
查看是否安裝成功,查看埠對應的pid
netstat -ano|findstr 8100
查看pid對應的服務程序名
tasklist|findstr pid值
也可以把這一步省略,放到java程序中調用服務,因為啟動服務佔用內存比較大,在java中可以在使用
的時候調用,然後馬上銷毀。
三:程序代碼
1:將word轉換為pdf方法
1 // 將word格式的文件轉換為pdf格式
2 public void Word2Pdf(String srcPath, String desPath) throws IOException {
3 // 源文件目錄
4 File inputFile = new File(srcPath);
5 if (!inputFile.exists()) {
6 System.out.println("源文件不存在!");
7 return;
8 }
9 // 輸出文件目錄
10 File outputFile = new File(desPath);
11 if (!outputFile.getParentFile().exists()) {
12 outputFile.getParentFile().exists();
13 }
14 // 調用openoffice服務線程
15 String command = "D:/openOffice/install/program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
16 Process p = Runtime.getRuntime().exec(command);
17
18 // 連接openoffice服務
19 OpenOfficeConnection connection = new SocketOpenOfficeConnection(
20 "127.0.0.1", 8100);
21 connection.connect();
22
23 // 轉換word到pdf
24 DocumentConverter converter = new OpenOfficeDocumentConverter(
25 connection);
26 converter.convert(inputFile, outputFile);
27
28 // 關閉連接
29 connection.disconnect();
30
31 // 關閉進程
32 p.destroy();
33 System.out.println("轉換完成!");
34 }
2:調用方法
1 @Test
2 public void testWord2Pdf() throws IOException {
3 String srcPath = "E:/test.docx";
4 String desPath = "E:/test.pdf";
5 Word2Pdf(srcPath, desPath);
6 }
以上代碼經過驗證,可以正常運行。
四:遇到問題
錯誤信息:
java.net.ConnectException: connection failed: socket,host=10.101.50.71,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect
at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79)
原因以及解決方法:第一次調用,soffice需要注冊,所以到soffice.exe的安裝路徑下雙擊soffice.exe,注冊即可。
❽ 怎樣更改linux小紅帽系統時區由mst改成cst
1) 找到相應的時區文件 /usr/share/zoneinfo/Asia/Shanghai
用這個文件替換當前的/etc/localtime文件。
2) 修改/etc/sysconfig/clock文件,修改為:
ZONE="Asia/Shanghai"
[color=red]UTC=true[/color]
ARC=false
3)
時間設定成2005年8月30日的命令如下:
#date -s 08/30/2005
將系統時間設定成下午6點40分0秒的命令如下。
#date -s 18:40:00
4)
同步BIOS時鍾,強制把系統時間寫入CMOS,命令如下:
#clock -w
5)重啟apache。
參考資料二、
本文檔解釋了如何從linux下設置計算機的時鍾,如何設置您的時區和其它與linux如何保存時間相關的材料。
您的計算機有兩個時鍾,一個是始終運行的、由電池供電的( 硬體的、BIOS或CMOS )時鍾,另一個是由運行在您的計算機上的操作系統維護的( 系統 )時鍾。硬體時鍾通常只在操作系統啟動時用來設置系統時鍾,然後直到重啟或關閉系統,由系統時鍾來記錄時間。在Linux 系統中,您可以選擇用UTC/GMT 時間或本地時間來記錄硬體時鍾。推薦的選項是用UTC 記錄,因為夏令時可以自動記錄。使用UTC 記錄硬體時鍾的唯一不足是,如果您使用雙系統,其它操作系統,如DOS 要求硬體時鍾用本地時間設置,那麼在那個操作系統里時間將是錯誤的。
設置時區:
Linux 下的時區是通過建立從/etc/localtime[1] 到/usr/share/zoneinfo [2] 目錄下與您所在時區相符的文件的符號鏈結實現的。例如,由於我在南澳大利亞,/etc/localtime就是到 /usr/share/zoneinfo/Australia/South的符號鏈結。要建立這個鏈結,運行:
ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime
替換your/zone 為形如Australia/NSW或Australia/Perth 的文件。看看/usr/share/zoneinfo目錄都有什麼時區。
[1] 這里假設/usr/share/zoneinfo 是到/etc/localtime 的鏈結的前提是Redhat Linux
[2] 在舊版本的系統里,您會發現使用/usr/lib/zoneinfo而不是/usr/share/zoneinfo。參考後面「一些應用程序中時間錯誤」。
設置UTC 或本地時間:
當Linux 啟動時,一個啟動腳本運行/sbin/hwclock 程序復制當前硬體時鍾時間到系統時鍾。hwclock 假定硬體時鍾設置為本地時間,除非它使用了--utc 參數。在RedHat Linux下您不是編輯啟動腳本,而是編輯/etc/sysconfig/clock 文件,相應的改變UTC 一行為UTC=true或UTC=false。
設置系統時鍾:
在Linux 下設置系統時鍾使用date命令。例如,設置當前時間和日期為July 31,11:16pm,運行date 07312316 ( 注意這里的時間是24小時制) ;如果您想設置年份為1998, 應該運行date 073123161998 ;要是也想設置秒,運行date 07312316.30或date 073123161998.30。要查看Linux 當前本地時間,使用date,不帶參數。
設置硬體時鍾:
要設置硬體時鍾,我喜歡的方式是首先設置系統時鍾,然後設置硬體時鍾為當前系統時鍾時間,使用命令/sbin/hwclock --systohc (或 /sbin/hwclock --systohc --utc ) ,如果您使用UTC 保存硬體時鍾) 。要查看當前硬體時鍾的設置,不帶參數運行hwclock 。如果硬體時鍾是UTC 保存,而您想看相應的本地時間,運行/sbin/hwclock --utc 。
一些應用程序中時間錯誤:
如果一些應用程序,如date顯示了正確的時間,而另一些則錯誤,而您運行著RedHat Linux 5.0/5.1,您很可能遇到了一個由於將時區信息從/usr/lib/zoneinfo 移動到/usr/share/zoneinfo 引起的bug 。修復的方法是建立一個從/usr/lib/zoneinfo 到/usr/share/zoneinfo 的符號鏈結:
ln -s ../share/zoneinfo /usr/lib/zoneinfo 。
小結:
*/etc/sysconfig/clock 設置硬體時鍾,無論是用UTC 保存還是用本地時間保存
*建立/etc/localtime到/usr/share/zoneinfo/...的符號鏈結來設置時區
*運行date MMDDhhmm 來設置當前系統日期/ 時間
*運行/sbin/hwclock --systohc [--utc]來設置硬體時鍾
其它有趣的註解:
Linux kernel總是按照從UTC 時間1970年1 月1 日午夜開始的秒數來儲存和計算時間,無論您的硬體時鍾是否用UTC 保存。轉換到本地時間的工作是運行時完成的。這樣做的一個妙處是,如果某人從不同的時區使用您的計算機,他可以設置時區環境變數,所有的日期和時間可以按他的時區正確顯示。
如果自UTC 1972年1 月1 日開始的秒數用保存為帶正負號32位整數,如同在您的Linux/Intel 系統上一樣,您的時鍾將在2038年停止工作。Linux 沒有Y2K 問題,但是確實存在2038年的問題。令人期望的是,那時我們都會使用64位系統來運行Linux 了。64位整數將使我們的時鍾一直運行到大約2922.71億年。
其它值得一看的程序:
* rdate ──從遠程機器獲得當前時間;可以用來設置系統時間
* xntpd ──類似rdata ,但是它是相當精確的,並且您需要有永久的網路連結xntpd 持續地運行,記錄網路延時、時鍾漂移等事件但是也有一個程序( ntpdate ) 包括在內,像rdate 一樣設置當前時間。
❾ linux系統上驗證系統時間和ntp server的時間是否一致。
GMT/UTC/CST;/etc/localtime,/usr/share/zoneinfo/*時區文件,/etc/profile加TZ變數;硬體時間RTC,系統時間;date,hwclock,tzselect;ntp relay server;rpm –ivh ntp-*;ntpdate 0.uk.pool.ntp.org ;ntpq –p,watch ntpq –p;/etc/ntp.conf;/etc/init.d/ntpd start;chkconfig --level 35 ntpd on;service ntpd status;設置NTP伺服器不難但是NTP本身是一個很復雜的協議.
1. 時間和時區
如果有人問你說現在幾點? 你看了看錶回答他說晚上8點了. 這樣回答看上去沒有什麼問題,但是如果問你的這個人在歐洲的話那麼你的回答就會讓他很疑惑,因為他那裡還太陽當空呢.
這里就有產生了一個如何定義時間的問題. 因為在地球環繞太陽旋轉的24個小時中,世界各地日出日落的時間是不一樣的.所以我們才有劃分時區(timezone) 的必要,也就是把全球劃分成24個不同的時區. 所以我們可以把時間的定義理解為一個時間的值加上所在地的時區(注意這個所在地可以精確到城市)
地理課上我們都學過格林威治時間(GMT), 它也就是0時區時間. 但是我們在計算機中經常看到的是UTC. 它是Coordinated Universal Time的簡寫. 雖然可以認為UTC和GMT的值相等(誤差相當之小),但是UTC已經被認定為是國際標准,所以我們都應該遵守標准只使用UTC
那麼假如現在中國當地的時間是晚上8點的話,我們可以有下面兩種表示方式
20:00 CST
12:00 UTC
這里的CST是Chinese Standard Time,也就是我們通常所說的北京時間了. 因為中國處在UTC+8時區,依次類推那麼也就是12:00 UTC了.
為什麼要說這些呢?
第一,不管通過任何渠道我們想要同步系統的時間,通常提供方只會給出UTC+0的時間值而不會提供時區(因為它不知道你在哪裡).所以當我們設置系統時間的時候,設置好時區是首先要做的工作
第二,很多國家都有夏令時(我記得小時候中國也實行過一次),那就是在一年當中的某一天時鍾撥快一小時(比如從UTC+8一下變成UTC+9了),那麼同理到時候還要再撥慢回來.如果我們設置了正確的時區,當需要改變時間的時候系統就會自動替我們調整
現在我們就來看一下如何在Linux下設置時區,也就是time zone
2. 如何設置Linux Time Zone
在Linux下glibc提供了事先編譯好的許多timezone文件, 他們就放在/usr/share/zoneinfo這個目錄下,這里基本涵蓋了大部分的國家和城市 # ls -F /usr/share/zoneinfo/
Africa/ Chile/ Factory Iceland Mexico/ posix/ Universal
America/ CST6CDT GB Indian/ Mideast/ posixrules US/
Antarctica/ Cuba GB-Eire Iran MST PRC UTC
Arctic/ EET GMT iso3166.tab MST7MDT PST8PDT WET
Asia/ Egypt GMT0 Israel Navajo right/ W-SU
Atlantic/ Eire GMT-0 Jamaica NZ ROC zone.tab
Australia/ EST GMT+0 Japan NZ-CHAT ROK Zulu
Brazil/ EST5EDT Greenwich Kwajalein Pacific/ Singapore
Canada/ Etc/ Hongkong Libya Poland Turkey
CET Europe/ HST MET Portugal UCT 在這裡面我們就可以找到自己所在城市的time zone文件. 那麼如果我們想查看對於每個time zone當前的時間我們可以用zmp命令 # zmp Hongkong
Hongkong Fri Jul 6 06:13:57 2007 HKT 那麼我們又怎麼來告訴系統我們所在time zone是哪個呢? 方法有很多,這里舉出兩種
第一個就是修改/etc/localtime這個文件,這個文件定義了我么所在的local time zone.
我們可以在/usr/share/zoneinfo下找到我們的time zone文件然後拷貝去到/etc/localtimezone(或者做個symbolic link)
假設我們現在的time zone是BST(也就是英國的夏令時間,UTC+1) # date
Thu Jul 5 23:33:40 BST 2007我們想把time zone換成上海所在的時區就可以這么做# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# date
Fri Jul 6 06:35:52 CST 2007這樣時區就改過來了(注意時間也做了相應的調整)
第二種方法也就設置TZ環境變數的值. 許多程序和命令都會用到這個變數的值. TZ的值可以有多種格式,最簡單的設置方法就是使用tzselect命令 # tzselect
... You can make this change permanent for yourself by appending the line
TZ='Asia/Hong_Kong'; (permission denied?) export TZ
to the file '.profile' in your home directory; then log out and log in again. TZ變數的值會override /etc/localtime. 也就是說當TZ變數沒有定義的時候系統才使用/etc/localtime來確定time zone. 所以你想永久修改time zone的話那麼可以把TZ變數的設置寫入/etc/profile里 3. Real Time Clock(RTC) and System Clock
說道設置時間這里還要明確另外一個概念就是在一台計算機上我們有兩個時鍾:一個稱之為硬體時間時鍾(RTC),還有一個稱之為系統時鍾(System Clock)
硬體時鍾是指嵌在主板上的特殊的電路, 它的存在就是平時我們關機之後還可以計算時間的原因
系統時鍾就是操作系統的kernel所用來計算時間的時鍾. 它從1970年1月1日00:00:00 UTC時間到目前為止秒數總和的值 在Linux下系統時間在開機的時候會和硬體時間同步(synchronization),之後也就各自獨立運行了
那麼既然兩個時鍾獨自運行,那麼時間久了必然就會產生誤差了,下面我們來看一個例子# date
Fri Jul 6 00:27:13 BST 2007 [root@rhe5 /]# hwclock --help
hwclock - query and set the hardware clock (RTC) Usage: hwclock [function] [options...]Functions:
--help show this help
--show read hardware clock and print result
--set set the rtc to the time given with --date
--hctosys set the system time from the hardware clock
--systohc set the hardware clock to the current system time
--adjust adjust the rtc to account for systematic drift since
the clock was last set or adjusted
--getepoch print out the kernel's hardware clock epoch value
--setepoch set the kernel's hardware clock epoch value to the
value given with --epoch
--version print out the version of hwclock to stdoutOptions:
--utc the hardware clock is kept in coordinated universal time
--localtime the hardware clock is kept in local time
--directisa access the ISA bus directly instead of /dev/rtc
--badyear ignore rtc's year because the bios is broken
--date specifies the time to which to set the hardware clock
--epoch=year specifies the year which is the beginning of the
hardware clock's epoch value
--noadjfile do not access /etc/adjtime. Requires the use of
either --utc or --localtime# hwclock --show
Fri 06 Jul 2007 12:27:17 AM BST -0.968931 seconds通過hwclock --show命令我們可以查看機器上的硬體時間(always in local time zone), 我們可以看到它和系統時間還是有一定的誤差的, 那麼我們就需要把他們同步
# hwclock –hctosys 把硬體時間設置成系統時間 # hwclock –systohc 把系統時間設置成硬體時間# hwclock --set --date="mm/dd/yy hh:mm:ss" 設置硬體時間我們可以開機的時候在BIOS里設定.也可以用hwclock命令# date -s "dd/mm/yyyy hh:mm:ss" 修改系統時間用date命令就最簡單了現在我們知道了如何設置系統和硬體的時間. 但問題是如果這兩個時間都不準確了怎麼辦? 那麼我們就需要在互聯網上找到一個可以提供我們准確時間的伺服器然後通過一種協議來同步我們的系統時間,那麼這個協議就是NTP了. 接下去我們所要說的同步就都是指系統時間和網路伺服器之間的同步了 4. 設置NTP Server前的准備
其實這個標題應該改為設置"NTP Relay Server"前的准備更加合適. 因為不論我們的計算機配置多好運行時間久了都會產生誤差,所以不足以給互聯網上的其他伺服器做NTP Server. 真正能夠精確地測算時間的還是原子鍾. 但由於原子鍾十分的昂貴,只有少部分組織擁有, 他們連接到計算機之後就成了一台真正的NTP Server. 而我們所要做的就是連接到這些伺服器上同步我們系統的時間,然後把我們自己的伺服器做成NTP Relay Server再給互聯網或者是區域網內的用戶提供同步服務. 1). 架設一個NTP Relay Server其實非常簡單,我們先把需要的RPM包裝上 # rpm -ivh ntp-4.2.2p1-5.el5.rpm2).找到在互聯網上給我們提供同步服務的NTP Server ,http://www.pool.ntp.org是NTP的官方網站,在這上面我們可以找到離我們城市最近的NTP Server. NTP建議我們為了保障時間的准確性,最少找兩個個NTP Server
那麼比如在英國的話就可以選擇下面兩個伺服器
0.uk.pool.ntp.org
1.uk.pool.ntp.org
它的一般格式都是number.country.pool.ntp.org中國的ntp伺服器地址:server 133.100.11.8 prefer
server 210.72.145.44
server 203.117.180.36
server 131.107.1.10
server time.asia.apple.com
server 64.236.96.53
server 130.149.17.21
server 66.92.68.246
server www.freebsd.org
server 18.145.0.30
server clock.via.net
server 137.92.140.80
server 133.100.9.2
server 128.118.46.3
server ntp.nasa.gov
server 129.7.1.66
server ntp-sop.inria.frserver (國家授時中心伺服器IP地址)3).在打開NTP伺服器之前先和這些伺服器做一個同步,使得我們機器的時間盡量接近標准時間. 這里我們可以用ntpdate命令 # ntpdate 0.uk.pool.ntp.org
6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec
# ntpdate 0.pool.ntp.org
6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec 假如你的時間差的很離譜的話第一次會看到調整的幅度比較大,所以保險起見可以運行兩次. 那麼為什麼在打開NTP服務之前先要手動運行同步呢?
1. 因為根據NTP的設置,如果你的系統時間比正確時間要快的話那麼NTP是不會幫你調整的,所以要麼你把時間設置回去,要麼先做一個手動同步
2. 當你的時間設置和NTP伺服器的時間相差很大的時候,NTP會花上較長一段時間進行調整.所以手動同步可以減少這段時間5. 配置和運行NTP Server
現在我們就來創建NTP的配置文件了, 它就是/etc/ntp.conf. 我們只需要加入上面的NTP Server和一個driftfile就可以了 # vi /etc/ntp.conf
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
driftfile /var/lib/ntp/ntp.drift非常的簡單. 接下來我們就啟動NTP Server,並且設置其在開機後自動運行# /etc/init.d/ntpd start
# chkconfig --level 35 ntpd on6. 查看NTP服務的運行狀況
現在我們已經啟動了NTP的服務,但是我們的系統時間到底和伺服器同步了沒有呢? 為此NTP提供了一個很好的查看工具: ntpq (NTP query)
我建議大家在打開NTP伺服器後就可以運行ntpq命令來監測伺服器的運行.這里我們可以使用watch命令來查看一段時間內伺服器各項數值的變化 # watch ntpq -p
Every 2.0s: ntpq -p Sat Jul 7 00:41:45 2007
remote refid st t when poll reach delay offset jitter
==============================================================================
+193.60.199.75 193.62.22.98 2 u 52 64 377 8.578 10.203 289.032
*mozart.musicbox 192.5.41.41 2 u 54 64 377 19.301 -60.218 292.411 現在我就來解釋一下其中的含義
remote: 它指的就是本地機器所連接的遠程NTP伺服器
refid: 它指的是給遠程伺服器(e.g. 193.60.199.75)提供時間同步的伺服器
st: 遠程伺服器的級別. 由於NTP是層型結構,有頂端的伺服器,多層的Relay Server再到客戶端. 所以伺服器從高到低級別可以設定為1-16. 為了減緩負荷和網路堵塞,原則上應該避免直接連接到級別為1的伺服器的.
t: 這個.....我也不知道啥意思^_^
when: 我個人把它理解為一個計時器用來告訴我們還有多久本地機器就需要和遠程伺服器進行一次時間同步
poll: 本地機和遠程伺服器多少時間進行一次同步(單位為秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和伺服器同步的頻率也就增加了,可以盡快調整到正確的時間范圍.之後poll值會逐漸增大,同步的頻率也就會相應減小
reach: 這是一個八進制值,用來測試能否和伺服器連接.每成功連接一次它的值就會增加
delay: 從本地機發送同步要求到伺服器的round trip time
offset: 這是個最關鍵的值, 它告訴了我們本地機和伺服器之間的時間差別. offset越接近於0,我們就和伺服器的時間越接近
jitter: 這是一個用來做統計的值. 它統計了在特定個連續的連接數里offset的分布情況. 簡單地說這個數值的絕對值越小我們和伺服器的時間就越精確
那麼大家細心的話就會發現兩個問題: 第一我們連接的是0.uk.pool.ntp.org為什麼和remote server不一樣? 第二那個最前面的+和*都是什麼意思呢?
第一個問題不難理解,因為NTP提供給我們的是一個cluster server所以每次連接的得到的伺服器都有可能是不一樣.同樣這也告訴我們了在指定NTP Server的時候應該使用hostname而不是IP
第二個問題和第一個相關,既然有這么多的伺服器就是為了在發生問題的時候其他的伺服器還可以正常地給我們提供服務.那麼如何知道這些伺服器的狀態呢? 這就是第一個記號會告訴我們的信息
*
它告訴我們遠端的伺服器已經被確認為我們的主NTP Server,我們系統的時間將由這台機器所提供
+
它將作為輔助的NTP Server和帶有*號的伺服器一起為我們提供同步服務. 當*號伺服器不可用時它就可以接管
-
遠程伺服器被clustering algorithm認為是不合格的NTP Server
x
遠程伺服器不可用
了解這些之後我們就可以實時監測我們系統的時間同步狀況了7. NTP安全設置
運行一個NTP Server不需要佔用很多的系統資源,所以也不用專門配置獨立的伺服器,就可以給許多client提供時間同步服務, 但是一些基本的安全設置還是很有必要的
那麼這里一個很簡單的思路就是第一我們只允許區域網內一部分的用戶連接到我們的伺服器. 第二個就是這些client不能修改我們伺服器上的時間
在/etc/ntp.conf文件中我們可以用restrict關鍵字來配置上面的要求
首先我們對於默認的client拒絕所有的操作 restrict default kod nomodify notrap nopeer noquery
然後允許本機地址一切的操作restrict 127.0.0.1
最後我們允許區域網內所有client連接到這台伺服器同步時間.但是拒絕讓他們修改伺服器上的時間restrict 192.168.1.0 mask 255.255.255.0 nomodify
把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置. NTP還可以用key來做authenticaiton,這里就不詳細介紹了8. NTP client的設置
做到這里我們已經有了一台自己的Relay Server.如果我們想讓區域網內的其他client都進行時間同步的話那麼我們就都應該照樣再搭建一台Relay Server,然後把所有的client都指向這兩台伺服器(注意不要把所有的client都指向Internet上的伺服器). 只要在client的ntp.conf加上這你自己的伺服器就可以了 代碼:
server ntp1.leonard.com
server ntp2.leonard.com
9. 一些補充和拾遺
1. 配置文件中的driftfile是什麼?
我們每一個system clock的頻率都有小小的誤差,這個就是為什麼機器運行一段時間後會不精確. NTP會自動來監測我們時鍾的誤差值並予以調整.但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以後之前的計算結果也就不會丟失了
2. 如何同步硬體時鍾?
NTP一般只會同步system clock. 但是如果我們也要同步RTC的話那麼只需要把下面的選項打開就可以了 可以通過ps –ef |grep ntp或者使用pgrep –lf ntp查看一下你的ntp服務是否啟動了。然後可以通過snoop命令進行ntp的檢測。
Snoop |grep –i ntp進行檢測。
在建立好ntp服務以後,可以用2個工具命令對ntp服務進行管理。
一個是ntpq是一個互動式應用命令,在它的下面有很多的子命令可以供大家使用.使用peers可以查看同步進程。如果還需要其他的命令可以輸入help 進行查看。還有一個工具命令是ntpdate這個命令一般用於ntp的客戶端使用。可以在/var/adm/messages中看到ntp的同步信息的情況。如果需要更加詳細的ntpq和ntpdate的信息可以使用man幫助進行查詢。