<安彥>Linux系統時間同步

一、調研背景
由於產品服務器在內網環境, Linux系統作爲服務器出現系統時間跑偏問題。一般情況下可以使用date命令進行時間設置,但是有些複雜操作時對多臺機器的時間差是有要求的,此時就需要使用ntpdate進行時間同步。

二、調研方向
1.怎麼做到服務器時間同步。
2.如何搭建自己的NTP服務器並供其他機器使用。
3.時間同步頻率如何去控制。
4.如何控制系統時間與硬件時間的問題。

三、基礎知識儲備

1.Linux時間的操作的常見命令
(1).date :查看當前時間,結果如下:
[root@99centos~]# date
2017年 04月 12日 星期三 14:34:30 CST
(2).date ‘+%Y%M%D’ 按照格式顯示當前日期,結果如下:
[root@99centos ~]# date “+%Y-%m-%d %H:%M:%S”
2017-04-12 14:36:10
(3).date -s “xxx xx:xx:xx” 設置系統時間
[root@99centos ~]# date -s “20170412 14:42:00”
2017年 04月 12日 星期三 14:42:00 CST

2.Linux的時間同步命令
命令:utpdate 時間服務器ip
[root@99centos ~]# ntpdate 192.168.5.75
12 Apr 15:26:27 ntpdate[2667]: step time server 192.168.5.75 offset -311.570389 sec

3.系統時間與硬件時間
(1)、linux中時間分爲系統時間與硬件時間,系統時間可以通過date命令進行查看而硬件時間則需要使用hwclock或者hwclock -r命令進行查看
(2)、設置系統時間:date -s “2016-01-15 15:58:00”設置硬件時間:hwclock –set –date “2016-01-15 15:58:00”
(3)、系統時間–>同步到–>硬件時間:hwclock -w

4.實現循環同步的命令
時間頻率控制使用crontab定時器進行定時任務
每十分鐘執行一次:
crontab -e
/10 * * * root ntpdate 192.168.5.75 && hwclock -w
*號從左到右爲分、時、日、月、周
hwclock -w是指讓系統時間同步到硬件時間
crontab -l 查看當前的定時任務
crontab -r 刪除當前的定時任務

四、Linux系統時間校準方案
1.方案一、定時將硬件時間同步到系統時間
沒有授時服務器時,定時將硬件時間同步到系統時間。
硬件時間–>同步到–>系統時間:hwclock -s
2.方案二、有授時服務器時且做了時間同步操作之後,把系統時間同步到硬件時間(自動同步)
1.NTP服務器的配置(環境:內網)
以win7作爲NTPserver,centOS作爲client進行時間同步。
Windows環境搭建服務器:
前提:windows:[email protected]
1.安裝按照步驟點下一步下一步就行,我設置的本機widows機器的IP:192.168.5.75
2.在計算機服務中開啓windows.time
3.在C:\Program Files目錄下有個ntp的配置文件ntp.conf
設置爲:
server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10
4.安裝完成後打開配置文件,即“C:\Program Files\NTP\etc下面的ntp.conf文件”。裏面有一點需要記住的地方,即“driftfile “C:\Program Files\NTP0606\etc\ntp.drift””這一條,也就是說我們要在對應的目錄下創建一個名爲“ntp.drift”的文件,文件的內容爲“0.000”
5.最後在開始cmd運行裏面輸入net start ntp service啓動服務。
如果請求服務已經啓動說明時間服務器搭建成功。
Linux 環境測試(遠程連接192.168.0.99):
1.設定NTP主機來源(其中prefer表示優先主機),192.168.5.75是本地的NTP服務器,所以優先指定從該主機同步時間。
server 192.168.5.75 prefer
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst

2.設置默認策略爲允許任何主機進行時間同步
restrict default nomodify

ntp服務,默認只會同步系統時間。
如果想要讓ntp同時同步硬件時間,可以設置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬件時間與系統時間一起同步。
允許BIOS與系統時間同步,也可以通過hwclock -w 命令
SYNC_HWCLOCK=yes

4.開啓服務(自動同步)
這裏寫圖片描述

5.查看ntp服務器是否運行成功
這裏寫圖片描述

運行狀態running,前後執行date命令發現時間改變成功。

6.查看ntp服務器有無和上層ntp連通

這裏寫圖片描述

7.查看ntp服務器與上層ntp的狀態
這裏寫圖片描述

remote - 本機和上層ntp的ip或主機名,“+”表示優先,“*”表示次優先refid - 參考上一層ntp主機地址
st - stratum階層
when - 多少秒前曾經同步過時間
poll - 下次更新在多少秒後
reach - 已經向上層ntp服務器要求更新的次數
delay - 網絡延遲
offset - 時間補償
jitter - 系統時間與bios時間差
此時說明自動時間同步配置成功。

2.方案三、有授時服務器時且做了時間同步操作之後,把系統時間同步到硬件時間(手動同步)
在方案二的基礎上:
Windows環境測試:
–>讓192.168.4.69與我的192.168.5.75時間同步,在右下方時間
–>點擊更改日期和時間設置
–>點擊Internet時間把時間服務器地址設置成192.168.5.75
–>點擊立即更新
–>成功。時間已同步。

Linux環境測試:

手動執行時間同步命令失敗案例:

這裏寫圖片描述

提示: the NTP socket is in use, exiting。這個NTP通信正在被使用。
解決方案:
這個是linux上已經存在這個進程,輸入:ps -ef | grep ntpd

這裏寫圖片描述

Kill掉ntp的進程
或者把linux上NTP服務關閉:systemctl stop ntpd.service後再執行手動時間同步命令

這裏寫圖片描述
時間同步執行成功。

注意:以上測試環境,Linux環境的防火牆iptables必須對UDP端口爲123的放行或者關閉Linux上的防火牆。

五、結論
根據產品需求,此次調研結果:
Linux命令的執行:
在/var/spool/cron下創建一個root文件
1、沒有授時服務器默認間隔1小時將硬件時間同步到系統時間
a. 默認間隔1小時將硬件時間同步到系統時間
echo ‘* /1 * * /sbin/hwclock -s’ >> /var/spool/cron/root
c.查看當前的定時任務
crontab -l
d.刪除當前用戶的指定定時任務
sed –i ‘/hwclock -s/d’ /var/spool/cron/root

2.有授時服務器的時候,這裏就以192.168.5.75和1小時時間頻率爲例
添加定時任務
echo ‘* /1 * * /usr/sbin/ntpdate 192.168.5.75 && /sbin/hwclock –w’ >> /var/spool/cron/root
注意:&&前一個命令執行不成功,後面一個命令不執行。
刪除當前用戶的指定定時任務
sed –i ‘/ntpdate/d’ /var/spool/cron/root
模糊查詢
grep ‘hwclock -s’ /var/spool/cron/root
查看root下的文件內容
cat /var/spool/cron/root

linux測試環境要求:
1.需要一個正常運行的授時服務器IP
2.crontab定時任務需要開啓自啓
查看crontab服務狀態:
systemctl status crond
手動啓動crontab服務:
systemctl start crond
加入開機自動啓動:
systemctl enable crond.service

3.需要對cron目錄下root文件和項目中res下clockup.sh開啓777權限

查看定時任務是否執行成功的日誌:
1.cat /var/log/cron
2.cat /var/spool/mail/root

頁面要求:動態設置授時服務器和時間同步頻率實現時間同步功能

技術思路:需採用方案三手動進行時間同步。Java代碼獲取頁面傳進的參數,進行調用Linux命令實現手動時間同步。在沒有方案三授時服務器的情況下,需採用方案一來執行解決時間同步問題。

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