0%

Linux服务器如何进行时间校对?

背景

计算机时间不是精确的时间,服务器环境对时间有不同程度的精度要求,需要校验。

本文以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命令。使用这个命令,你可以指定以何种周期执行想要执行的命令。这里有一张图能直观说明:

image

比如:

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服务,因为没有需求,本人未做尝试,参见最末参考内容。

参考

NTP 時間伺服器

Linux之crontab定时任务

ntpdate与ntpd两种时间同步方式