背景
计算机时间不是精确的时间,服务器环境对时间有不同程度的精度要求,需要校验。
本文以CentOS release 6.9 (Final) 为例。
4种校验方法
- 纯手工:手工校验不精确
- 半自动:通过工具比照时间服务器进行校验
- 全自动:无需人工干预自行进行时间校验
- 平滑全自动:全自动校验而且服务器时间连贯不产生跳跃
详细介绍
纯手工
使用date命令,一般系统时间相差不会太多,如果你不严格要求时间精度,这个命令足够了。
查看所在时区:
1 | date -R |
得到:
1 | Tue, 17 Sep 2019 22:27:56 +0800 |
时区一般不会错,不过在改时间之前最好确认时区。
修改时间
1 | date -s 21:50:00 |
得到响应:
1 | 2019年 09月 17日 星期二 21:50:00 CST |
修改日期
1 | date -s "20190917 22:04:00" |
得到响应:
1 | 2019年 09月 17日 星期二 22:04:00 CST |
以上操作简单,但是还有繁琐的日期和时间的设置,接下来看看更方便的。
半自动
半自动设置需要额外的工具,这里需要使用命令安装:
1 | yum -y install ntp |
作为小白,可以不管这是个啥,只需要知道这玩意儿装了以后能做什么:可以运行一行命令把机器的日期时间设置完毕。
做这步之前需要找一台提供标准时间的服务器(NTP服务器),因为是阿里云的服务器,这里用的也是他家的:
1 | ntpdate -u ntp5.aliyun.com |
上面命令中,ntp5.aliyun.com是一台NTP服务器地址,-u参数最好加上,否则容易出问题:
1 | 17 Sep 21:50:16 ntpdate[13689]: the NTP socket is in use, exiting |
正确的响应例子:
1 | 17 Sep 21:59:47 ntpdate[13697]: step time server 203.107.6.88 offset 545.042721 sec |
全自动
这里说的全自动就是让机器定时执行上面半自动的命令。不得不了解一下crontab命令。使用这个命令,你可以指定以何种周期执行想要执行的命令。这里有一张图能直观说明:
比如:
1 | */10 * * * * /usr/sbin/ntpdate -u ntp5.aliyun.com |
这个命令每隔10分钟和指定的NTP服务器进行一次时间校验。
以上命令不是在命令行直接调用,而是需要保存在一个文件中,通过
crontab命令去执行其中的内容。
默认会有一个文件存储当前用户的定时任务信息,通过以下命令查看:
1 | crontab -l |
如果没有任何内容则显示如下:
1 | no crontab for root |
下面我们把上面定时更新的定时任务添加上:
1 | crontab -e |
这个命令执行后进入到了vim界面,通过vim命令,把上面的内容粘贴进去就好,保存后退出,再次查看定时任务列表,得到:
1 | */10 * * * * /usr/sbin/ntpdate -u ntp5.aliyun.com |
定时任务是否执行了呢?可以进行一下测试,通过date命令设置一个新的时间,偏离标准时间。等待一个定时任务执行周期,这里也就是10分钟,再次查看系统时间。如果时间恢复到标准时间,则定时任务执行了,目标达成。如果测试没通过,可能需要查看一下crond的服务状态,使用命令:
1 | service crond status |
对于不方便简单测试的定时任务可以通过下列命令查看执行情况:
1 | tail -f /var/log/cron |
平滑全自动
使用ntpd服务,因为没有需求,本人未做尝试,参见最末参考内容。