在一些大公司經常出現這樣一個情況:公司或一些機關單位的內部業務系統的應用服務器以及數據都是做的多機集群部署而且基本都是linux系統,而且都是內部網,不與外網通訊的。這樣經常就會出現一個情況,我發送任務的時間還晚於對方任務接收的時間。這樣經常令我們頭痛,那為什么會出現這樣一個情況呢,其實就是linux機器的系統沒有定時同步導致的,這個問題不僅linux系統有,windows系統也會出現這樣的問題,比如我們的windows系統很久沒開過機了,那么我們就會發現windows系統上的時間不對了,但是為什么我們常使用的windows系統就不會時間不一致呢,因為我們的windows系統會自動定時的與遠程標准的時間服務器同步時間,對出現的時間誤差進行校准。
但是這里我們說了,是內網的linux系統,不能與外界互聯網通訊而且linux因為其開放性的原因也有一個弊端,很多東西都沒有設置死,只能自己去設置,尤其是黑乎乎的命令行系統。
這里教大家一個方法就是設置linux自動定時的與某一個內部時間服務器同步,這樣就可以保證多台機器的時間始終一致。這里主要有兩個問題:
1.如何實現與指定時間服務器同步,進行時間校准?
2.怎樣實現linux系統服務級的定時執行?
好吧,下面依次解決這兩個問題就好了。首先假設我們的時間服務器的ip地址為192.168.1.10。
1.時間同步我們用命令ntpdate,這個命令具體用法以后我的博客會專門講到這個問題,也可以查看命令幫助。這里先直接使用即可:
ntpdate -u 192.168.1.10
這樣就可以與192.168.1.10的時間服務器同步了。
2.怎樣實現定時執行。這里主要都是用到/etc/crontab實現定時。這個文件是linux的系統定時調度文件,在系統啟動后會加載這個文件。先看下這個文件:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed ~ ~ ~ ~
看看這個文件,前面四行可以忽略不管。其實這個有個例子在這里了,非常容易看懂,關鍵就是這一行:
* * * * * command to be executed
第一個*表示分鍾,第二個*表示小時,第三個*表示一個月的那一天,第四個*表示月份,第五個*表示一周的那一天。其中要表示任何一個都可以就直接用*表示。前面五個位置以后就表示要執行的命令和參數。
所以定時執行已經掌握了,那么我們定時時間同步校准應該怎樣呢。
首先進入/etc/crontab文件
vim /etc/crontab
插入一行定時執行同步代碼,假設我們每天凌晨1點執行一次時間同步。即如下代碼:
00 1 * * * root ntpdate -u 192.168.1.10
這樣我們就設置好了linux服務器定時與時間服務器同步校准時間的任務了。bingo!是不是很簡單呢
如果有時間的話,以后會寫一下ntpdate命令的使用以及時間服務器的搭建。