Linux服务器如何进行时间校对?
本文介绍了在linux环境下,4种校对时间的方式,精度和自动化程度逐渐加强,总有一款适合你。
背景
计算机时间不是精确的时间,服务器环境对时间有不同程度的精度要求,需要校验。

本文以CentOS release 6.9 (Final) 为例。

4种校验方法
纯手工:手工校验不精确
半自动:通过工具比照时间服务器进行校验
全自动:无需人工干预自行进行时间校验
平滑全自动:全自动校验而且服务器时间连贯不产生跳跃
详细介绍
纯手工
使用date命令,一般系统时间相差不会太多,如果你不严格要求时间精度,这个命令足够了。

查看所在时区:
date -R
得到:

Tue, 17 Sep 2019 22:27:56 +0800
时区一般不会错,不过在改时间之前最好确认时区。

修改时间
date -s 21:50:00
得到响应:

2019年 09月 17日 星期二 21:50:00 CST
修改日期
date -s "20190917 22:04:00"
得到响应:

2019年 09月 17日 星期二 22:04:00 CST
以上操作简单,但是还有繁琐的日期和时间的设置,接下来看看更方便的。

半自动
半自动设置需要额外的工具,这里需要使用命令安装:

yum -y install ntp
作为小白,可以不管这是个啥,只需要知道这玩意儿装了以后能做什么:可以运行一行命令把机器的日期时间设置完毕。

做这步之前需要找一台提供标准时间的服务器(NTP服务器),因为是阿里云的服务器,这里用的也是他家的:

ntpdate -u ntp5.aliyun.com
上面命令中,ntp5.aliyun.com是一台NTP服务器地址,-u参数最好加上,否则容易出问题:

17 Sep 21:50:16 ntpdate[13689]: the NTP socket is in use, exiting
正确的响应例子:

17 Sep 21:59:47 ntpdate[13697]: step time server 203.107.6.88 offset 545.042721 sec
全自动
这里说的全自动就是让机器定时执行上面半自动的命令。不得不了解一下crontab命令。使用这个命令,你可以指定以何种周期执行想要执行的命令。这里有一张图能直观说明:

image

比如:

*/10 * * * * /usr/sbin/ntpdate -u ntp5.aliyun.com
这个命令每隔10分钟和指定的NTP服务器进行一次时间校验。

以上命令不是在命令行直接调用,而是需要保存在一个文件中,通过
crontab命令去执行其中的内容。

默认会有一个文件存储当前用户的定时任务信息,通过以下命令查看:

crontab -l
如果没有任何内容则显示如下:

no crontab for root
下面我们把上面定时更新的定时任务添加上:

crontab -e
这个命令执行后进入到了vim界面,通过vim命令,把上面的内容粘贴进去就好,保存后退出,再次查看定时任务列表,得到:

*/10 * * * * /usr/sbin/ntpdate -u ntp5.aliyun.com
定时任务是否执行了呢?可以进行一下测试,通过date命令设置一个新的时间,偏离标准时间。等待一个定时任务执行周期,这里也就是10分钟,再次查看系统时间。如果时间恢复到标准时间,则定时任务执行了,目标达成。如果测试没通过,可能需要查看一下crond的服务状态,使用命令:

service crond status
对于不方便简单测试的定时任务可以通过下列命令查看执行情况:

tail -f /var/log/cron
平滑全自动
使用ntpd服务,因为没有需求,本人未做尝试,参见最末参考内容。