一、首先要弄清幾個概念:
公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出高縣免費做網(wǎng)站回饋大家。
1. “系統(tǒng)時間”與“硬件時間”
系統(tǒng)時間: 一般說來就是我們執(zhí)行 date 命令看到的時間,linux系統(tǒng)下所有的時間調(diào)用(除了直接訪問硬件時間的命令)都是使用的這個時間。?
硬件時間: 主板上BIOS中的時間,由主板電池供電來維持運行,系統(tǒng)開機(jī)時要讀取這個時間,并根據(jù)它來設(shè)定系統(tǒng)時間(注意:系統(tǒng)啟動時根據(jù)硬件時間設(shè)定系統(tǒng)時間的過程可能存在時區(qū)換算,這要視具體的系統(tǒng)及相關(guān)設(shè)置而定)。
2. “UTC時間”與“本地時間”
UTC時間:Coordinated Universal 8 e2 i( H7 t0 ^/ ^Time 世界協(xié)調(diào)時間(又稱世界標(biāo)準(zhǔn)時間、世界統(tǒng)一時間),在一般精度要求下,它與GMT(Greenwich Mean Time,格林威治標(biāo)準(zhǔn)時間)是一樣的,其實也就是說 GMT≈UTC,但 UTC 是以原子鐘校準(zhǔn)的,更精確。?
本地時間:由于處在不同的時區(qū),本地時間一般與UTC是不同的,換算方法就是
本地時間 = UTC + 時區(qū) 或 UTC = 本地時間 - 時區(qū)
時區(qū)東為正,西為負(fù),例如在中國,本地時間都使用北京時間,在linux上顯示就是 CST(China Standard Time,中國標(biāo)準(zhǔn)時,注意美國的中部標(biāo)準(zhǔn)時Central Standard Time也縮寫為CST,與這里的CST不是一回事?。瑫r區(qū)為東八區(qū),也就是 +8 區(qū),所以 CST=UTC+(+8小時) 或 UTC=CST-(+8小時)。
二、時間命令
1. 系統(tǒng)時間 date
直接調(diào)用 date,得到的是本地時間。如果想得到UTC時間的話,使用 date -u。?
[12-01 19:07 ~]$ date
2009年 12月 07日 星期一 14:22:20 CST
[12-01 19:07 ~]$ date -u
2009年 12月 07日 星期一 06:22:22 UTC
2. 硬件時間 /sbin/hwclock
直接調(diào)用 /sbin/hwclock 顯示的時間就是 BIOS 中的時間嗎?未必!這要看 /etc/sysconfig/clock 中是否啟用了UTC,如果啟用了UTC(UTC=true),顯示的其實是經(jīng)過時區(qū)換算的時間而不是BIOS中真正的時間,如果加上 --localtime 選項,則得到的總是 BIOS 中實際的時間.?
[12-01 19:07 ~]# hwclock
2009年12月07日 星期一 14時28分43秒 -0.611463 seconds
[12-01 19:07 ~]# hwclock --utc
2009年12月07日 星期一 14時28分46秒 -0.594189 seconds
[12-01 19:07 ~]# hwclock --localtime
2009年12月07日 星期一 06時28分50秒 -0.063875 seconds
3. /etc/localtime
這個文件用來設(shè)置系統(tǒng)的時區(qū),將 /usr/share/zoneinfo/ 中相應(yīng)文件拷貝到/etc下并重命名為 localtime 即可修改時區(qū)設(shè)置,而且這種修改對 date 命令是及時生效的。不論是 date 還是 hwclock 都會用到這個文件,會根據(jù)這個文件的時區(qū)設(shè)置來進(jìn)行UTC和本地之間之間的換算。
4. /etc/sysconfig/clock
這個文件只對 hwclock 有效,而且似乎是只在系統(tǒng)啟動和關(guān)閉的時候才有用,比如修改了其中的 UTC=true 到 UTC=false 的前后,執(zhí)行 hwclock (--utc, 或 --localtime) 都沒有變化,要重啟系統(tǒng)后才生效。注:如果設(shè)置 UTC=false 并重啟系統(tǒng)后,執(zhí)行一些命令結(jié)果如下:?
date 2009年 12月 07日 星期一 19:26:29 CST
date -u 2009年 12月 07日 星期一 11:26:29 UTC
hwclock 2009年12月07日 星期一 19時26分30秒 -0.442668 seconds
hwclock --utc 2009年12月08日 星期二 03時26分31秒 -0.999091 seconds
hwclock --localtime 2009年12月07日 星期一 19時26分32秒 -0.999217 seconds
可見,如果不使用UTC,BIOS時間(紅色部分)就是系統(tǒng)本地時間,而且注意這時執(zhí)行 hwclock --utc 得到的結(jié)果沒有任何意義,因為這里我們已經(jīng)禁用了UTC,而且也明顯不符合“本地時間=UTC+時區(qū)”的關(guān)系。
三、linux與windows雙系統(tǒng)間的時間同步
系統(tǒng)啟動和關(guān)閉時,硬件時間與系統(tǒng)時間之間的同步有兩種方式(假設(shè)在中國,用CST代表本地時間):?
方式A: 使用UTC(對linux就是 /etc/sysconfig/clock 中 UTC=true)
開機(jī): BIOS-------UTC(將BIOS中的時間看成是UTC)------(時區(qū)變化)-----CST
關(guān)機(jī): CST -------(時區(qū)變化)-----UTC-------存儲到------BIOS
方式B: 不使用UTC(對linux就是 /etc/sysconfig/clock 中 UTC=false)
開機(jī): BIOS---------------------CST(將BIOS中的時間看成是CST)
關(guān)機(jī): CST ---------存儲到------BIOS
通過設(shè)定 /etc/sysconfig/clock,linux可以支持這兩種方式,然而windows只支持方式B(至少是默認(rèn)支持B,而我不知道怎么能讓它支 持A),那么在雙系統(tǒng)情況下,如果linux設(shè)成A方式,那么在linux與windows系統(tǒng)切換時一定會造成時間混亂的,解決辦法就是將linux中 的UTC禁用,也設(shè)成B方式就可以了。
注:可以通過 hwclock --hctosys 來利用硬件時間來設(shè)置系統(tǒng)時間(注意不是簡單的復(fù)制BIOS中的時間為系統(tǒng)時間,要看是否使用UTC,如果使用的話則要做時區(qū)換算),通過 hwclock --systohc 來根據(jù)系統(tǒng)時間設(shè)置硬件時間(也要看是否啟用UTC來決定是否做時區(qū)換算)。
總之,不論使用 --systohc 還是 --hctosys,同步后直接運行不帶參數(shù)的 hwclock 得到的時間與直接運行 date 得到的時間應(yīng)該一致,這個時間是否就是BIOS中的時間(hwclock --localtime)那就不一定了,如果啟用了UTC就不是,沒啟用UTC就是。
而且還要注意:在系統(tǒng)中手動使用 hwclock hwclock --set --date='yyyy-mm-dd' 來設(shè)置BIOS時間只在系統(tǒng)運行時有效,因為當(dāng)系統(tǒng)關(guān)閉時,還會按設(shè)定好的方式根據(jù)系統(tǒng)時間來重設(shè)BIOS時間的,于是手動的設(shè)置便被覆蓋掉了。
---------------------------------------------------------------------
(二)
Linux時鐘分為系統(tǒng)時鐘(System Clock)和硬件(Real Time Clock,簡稱RTC)時鐘。系統(tǒng)時鐘是指當(dāng)前Linux Kernel中的時鐘,而硬件時鐘則是主板上由電池供電的時鐘,這個硬件時鐘可以在BIOS中進(jìn)行設(shè)置。當(dāng)Linux啟動時,硬件時鐘會去讀取系統(tǒng)時鐘的設(shè)置,然后系統(tǒng)時鐘就會獨立于硬件運作。?
Linux中的所有命令(包括函數(shù))都是采用的系統(tǒng)時鐘設(shè)置。在Linux中,用于時鐘查看和設(shè)置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只用一個就行,只不過clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。
在Linux系統(tǒng)中存在兩個時鐘時間,分別是
硬件時鐘是指的在主板上的時鐘設(shè)備,也就是通??梢栽贐IOS畫面設(shè)置的時鐘,即使關(guān)機(jī)狀態(tài)也可以計算時間。
而系統(tǒng)時鐘則是指Kernel中的時鐘,其值是由1970年1月1日00:00:00 UTC時間至當(dāng)前時間所經(jīng)歷的秒數(shù)總和。當(dāng)Linux啟動的時候,系統(tǒng)時鐘會讀取硬件時鐘的設(shè)定,之后系統(tǒng)時鐘獨立運作。長時間運行兩者可能將會產(chǎn)生誤差。另外所有的Linux相關(guān)指令都是讀取系統(tǒng)時鐘指定的,如date。
我們這里討論的是系統(tǒng)時間。
NTP,網(wǎng)絡(luò)時間協(xié)議,使用 123/udp 端口進(jìn)行網(wǎng)絡(luò)時鐘同步;NTP 是仍在使用中的最古老的網(wǎng)絡(luò)傳輸協(xié)議之一(1985 年前開始)。
以前Linux時間同步基本是使用 ntpdate 和 ntpd 這兩個工具實現(xiàn)的,但是這兩個工具已經(jīng)很古老了。
【注】ntpdate和ntpd是互斥的,兩者不能同時使用。ntpd是步進(jìn)式平滑的逐漸調(diào)整時間,而ntpdate是斷點式更新時間。
RHEL/CentOS 7.x 已經(jīng)將 chrony 作為默認(rèn)時間同步工具了。
其他Linux (如 ubuntu) 使用 systemd-timesyncd 服務(wù)。
chrony 是 RedHat 開發(fā)的,它是網(wǎng)絡(luò)時間協(xié)議(NTP)的另一種實現(xiàn);
RHEL/CentOS 7.x 的默認(rèn)時間同步工具;
chrony 可以同時做為 ntp 服務(wù)的客戶端和服務(wù)端;安裝完后有兩個程序 chronyd、chronyc:
chronyd 是一個 daemon 守護(hù)進(jìn)程,chronyc 是用來監(jiān)控 chronyd 性能和配置參數(shù)的命令行工具。
系統(tǒng)版本:CentOS 7.5
chrony_server(relay):10.0.0.4
chrony_client:10.0.0.5
Edit file /etc/chrony.conf
默認(rèn)已經(jīng)啟動,不需要調(diào)整
example:
配置 chrony
edit file: /etc/chrony.conf
再次用chronyc 命令檢查,比較它與chronyd server的差異
systemd-timesyncd 是一個用于跨網(wǎng)絡(luò)同步系統(tǒng)時鐘的守護(hù)服務(wù)。它實現(xiàn)了一個 SNTP 客戶端,但更輕量級,更集成systemd。
systemd-timesyncd 啟動時會讀取 /etc/systemd/timesyncd.conf 配置文件,內(nèi)容如下:
你可以輸入你希望使用的其它時間服務(wù)器,比如你自己的本地 NTP 服務(wù)器,在 NTP= 行上輸入一個以空格分隔的服務(wù)器列表。
如果服務(wù)器可以直接連接internet,不用修改默認(rèn)配置;如果在內(nèi)網(wǎng),需要單獨指定。
在最新的 Ubuntu 版本中,timedatectl 替代了老舊的 ntpdate。默認(rèn)情況下,timedatectl 在系統(tǒng)啟動的時候會立刻同步時間,并在稍后網(wǎng)絡(luò)連接激活后通過 socket 再次檢查一次。
timesyncd 替代了 ntpd 的客戶端的部分。默認(rèn)情況下 timesyncd 會定期檢測并同步時間。它還會在本地存儲更新的時間,以便在系統(tǒng)重啟時做時間單步調(diào)整。
通過 timedatectl 和 timesyncd 設(shè)置的當(dāng)前時間狀態(tài)和時間配置,可以使用 timedatectl status 命令來進(jìn)行確認(rèn)。
由于 timedatectl 的存在,各發(fā)行版已經(jīng)棄用了 ntpdate,默認(rèn)不再進(jìn)行安裝。
timedatectl
timedatectl status ,查看時間同步狀態(tài);
timedatectl set-ntp true ,開啟網(wǎng)絡(luò)時間同步;
timedatectl set-timezone ZONE ,設(shè)置時區(qū)。
NTP synchronized: yes 表示時間是同步狀態(tài)。
查看服務(wù)狀態(tài)以及從哪個ntp server同步時間。
NTP:軟件層面實現(xiàn),成本低。同步精度10ms左右。
PTP:需要網(wǎng)絡(luò)接口具備在物理層提供時間戳的功能,同步精度優(yōu)于100ns,局域網(wǎng)的節(jié)點需要使用支持PTP功能的交換機(jī)。局域網(wǎng)網(wǎng)絡(luò)接點不支持PTP的話,只能同不到us,而且受網(wǎng)絡(luò)背景流量影響。
使用crontab定時任務(wù)crontab-e進(jìn)入編輯基本格式:*****command分時日月周命令第1列表示分鐘1~59每分鐘用*或者*/1表示第2列表示小時1~23(0表示0點)第3列表示日期1~31第4列表示月份1~12第5列標(biāo)識號星期0~6(0表示星期天)第6列要運行的命令crontab文件的一些例子:3021***/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每晚的21:30重啟apache。4541,10,22**/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每月1、10、22日的4:45重啟apache。101**6,0/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每周六、周日的1:10重啟apache。0,3018-23***/usr/local/etc/rc.d/lighttpdrestart上面的例子表示在每天18:00至23:00之間每隔30分鐘重啟apache。023**6/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每星期六的11:00pm重啟apache。**/1***/usr/local/etc/rc.d/lighttpdrestart每一小時重啟apache*23-7/1***/usr/local/etc/rc.d/lighttpdrestart晚上11點到早上7點之間,每隔一小時重啟apache0114*mon-wed/usr/local/etc/rc.d/lighttpdrestart每月的4號與每周一到周三的11點重啟apache041jan*/usr/local/etc/rc.d/lighttpdrestart一月一號的4點重啟apache名稱:crontab使用權(quán)限:所有使用者使用方式:crontabfile[-uuser]-用指定的文件替代目前的crontab。crontab-[-uuser]-用標(biāo)準(zhǔn)輸入替代目前的crontab.crontab-1[user]-列出用戶目前的crontab.crontab-e[user]-編輯用戶目前的crontab.crontab-d[user]-刪除用戶目前的crontab.crontab-cdir-指定crontab的目錄。crontab文件的格式:MHDmdcmd.M:分鐘(0-59)。H:小時(0-23)。D:天(1-31)。m:月(1-12)。d:一星期內(nèi)的天(0~6,0為星期天)。cmd要運行的程序,程序被送入sh執(zhí)行,這個shell只有USER,HOME,SHELL這三個環(huán)境變量說明:crontab是用來讓使用者在固定時間或固定間隔執(zhí)行程序之用,換句話說,也就是類似使用者的時程表。-uuser是指設(shè)定指定user的時程表,這個前提是你必須要有其權(quán)限(比如說是root)才能夠指定他人的時程表。如果不使用-uuser的話,就是表示設(shè)定自己的時程表。參數(shù):crontab-e:執(zhí)行文字編輯器來設(shè)定時程表,內(nèi)定的文字編輯器是VI,如果你想用別的文字編輯器,則請先設(shè)定VISUAL環(huán)境變數(shù)來指定使用那個文字編輯器(比如說setenvVISUALjoe)crontab-r:刪除目前的時程表crontab-l:列出目前的時程表crontabfile[-uuser]-用指定的文件替代目前的crontab。時程表的格式如下:f1f2f3f4f5program其中f1是表示分鐘,f2表示小時,f3表示一個月份中的第幾日,f4表示月份,f5表示一個星期中的第幾天。program表示要執(zhí)行的程序。當(dāng)f1為*時表示每分鐘都要執(zhí)行program,f2為*時表示每小時都要執(zhí)行程序,其馀類推當(dāng)f1為a-b時表示從第a分鐘到第b分鐘這段時間內(nèi)要執(zhí)行,f2為a-b時表示從第a到第b小時都要執(zhí)行,其馀類推當(dāng)f1為*/n時表示每n分鐘個時間間隔執(zhí)行一次,f2為*/n表示每n小時個時間間隔執(zhí)行一次,其馀類推當(dāng)f1為a,b,c,時表示第a,b,c,分鐘要執(zhí)行,f2為a,b,c,時表示第a,b,c個小時要執(zhí)行,其馀類推使用者也可以將所有的設(shè)定先存放在檔案file中,用crontabfile的方式來設(shè)定時程表。例子:#每天早上7點執(zhí)行一次/bin/ls:07***/bin/ls在12月內(nèi),每天的早上6點到12點中,每隔3個小時執(zhí)行一次/usr/bin/backup:06-12/3*12*/usr/bin/backup周一到周五每天下午5:00寄一封信給alex@domain.name:017**1-5mail-s"hi"alex@domain.name/dev/null21即可例子2:#每天早上6點10分106***date#每兩個小時0*/2***date#晚上11點到早上8點之間每兩個小時,早上8點023-7/2,8***date#每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點0114*mon-weddate#1月份日早上4點041jan*date范例$crontab-l列出用戶目前的crontab。
本文題目:linux7同步時間命令的簡單介紹
鏈接URL:http://jinyejixie.com/article6/docppig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、企業(yè)建站、軟件開發(fā)、網(wǎng)站設(shè)計公司、移動網(wǎng)站建設(shè)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)