在一些大公司常常出现这样一个状况:公司或一些机关单位的内部业务系统的应用服务器以及数据都是作的多机集群部署并且基本都是linux系统, 并且都是内部网,不与外网通信的。这样常常就会出现一个状况,我发送任务的时间还晚于对方任务接收的时间。这样常常令咱们头痛,那为何会出现这样一个情 况呢,其实就是linux机器的系统没有定时同步致使的,这个问题不只linux系统有,windows系统也会出现这样的问题,好比咱们的 windows系统好久没开过机了,那么咱们就会发现windows系统上的时间不对了,可是为何咱们常使用的windows系统就不会时间不一致呢, 由于咱们的windows系统会自动定时的与远程标准的时间服务器同步时间,对出现的时间偏差进行校准。linux
可是这里咱们说了,是内网的linux系统,不能与外界互联网通信并且linux由于其开放性的缘由也有一个弊端,不少东西都没有设置死,只能本身去设置,尤为是黑乎乎的命令行系统。vim
这里教你们一个方法就是设置linux自动定时的与某一个内部时间服务器同步,这样就能够保证多台机器的时间始终一致。这里主要有两个问题:windows
1.如何实现与指定时间服务器同步,进行时间校准?bash
2.怎样实现linux系统服务级的定时执行?服务器
好吧,下面依次解决这两个问题就行了。首先假设咱们的时间服务器的ip地址为192.168.1.10。ide
1.时间同步咱们用命令ntpdate,这个命令具体用法之后个人博客会专门讲到这个问题,也能够查看命令帮助。这里先直接使用便可:spa
ntpdate -u 192.168.1.10
这样就能够与192.168.1.10的时间服务器同步了。orm
2.怎样实现定时执行。这里主要都是用到/etc/crontab实现定时。这个文件是linux的系统定时调度文件,在系统启动后会加载这个文件。先看下这个文件:server
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命令的使用以及时间服务器的搭建。
本文来自:Linux教程网