欢迎访问我的博客,你的支持,是我最大的动力!

Linux下使用NTP同步系统时间

Linux 小马奔腾 12272℃ 评论
目录:
[显示]

Linux下,保持系统时间与标准时间一致,是一项很重要的也非常有必要做的一项任务。使用NTP并不需要在本机安装ntpd服务,除非你还希望你的服务器为其它服务器提供授时服务。

系统环境

[root@dong ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@dong ~]# uname -a
Linux dong 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@dong ~]#

我这里是CentOS 7.3 内核为3.10.0-514.el7.x86_64

卸载ntp服务

为了保持系统的整洁,并不需要专门安装ntp服务到本机,因为,安装该服务后,它会开放很多的端口,看起来很不爽,这里把它卸载了(系统默认并不会安装,如果你发现你安装了,可以参照以下代码将其删除)

查看系统时间
[root@dong ~]# timedatectl
Local time: Tue 2018-01-02 14:15:54 CST
Universal time: Tue 2018-01-02 06:15:54 UTC
RTC time: Tue 2018-01-02 06:15:54
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[root@dong ~]# date
Tue Jan 2 14:15:57 CST 2018
同步系统时间
[root@dong ~]# ntpdate cn.pool.ntp.org
2 Jan 14:17:53 ntpdate[44309]: adjust time server 120.25.108.11 offset 0.042118 sec
[root@dong ~]#

只需要执行这样一条命令,就会自动修正系统时间

添加定时任务

可以通过定时任务的方式,每天执行一次该命令,这样,可以确保系统时间的准确性

crontab -e
0 2 * * * ntpdate cn.pool.ntp.org >/dev/null 2>&1  这样写实际并不会执行,下面会原因分析
systemctl restart crond

如上设置为每天夜里2点钟执行一次校时命令,重启crond服务,让定时任务生效。

排坑经历

更新于2018-04-10

要点使用cron执行ntpdate时,需要明确命令路径,否则会找不到命令

背景:之前每台服务器均添加定时任务0 2 * * * ntpdate cn.pool.ntp.org >/dev/null 2>&1,每天凌晨2点校准一次服务器时间,理论上讲,这个较准频率是没有问题的,但是,实际情况是两台服务器时间误差超过32秒,并且每台服务器时间都不一致,排查定时任务日志,发现定时任务有运行。

分析:因为在定时任务中使用了>/dev/null 2>&1将命令执行结果丢掉了,所以不能看到运行情况,实际上,在定时任务中,会因找不到ntpdate命令而执行失败!分析定时任务中环境变量PATH的值可以发现,cron(bash)默认的PATH=/usr/bin:/bin,仅包含两个目录,如果要执行的命令不在这两个目录中,那么,就会出现因找不到命令而执行失败的情况。因为ntpdate位于/usr/sbin目录下,所以是找不到的。

env
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env 

whereis ntpdate
/usr/sbin/ntpdate

解决:不直接使用ntpdate而是用/usr/sbin/ntpdate

0 */1 * * * /usr/sbin/ntpdate time.pool.aliyun.com >/dev/null 2>&1
最佳实践
/usr/sbin/ntpdate 85.199.214.100 193.228.143.23 202.112.10.37 182.92.12.11 120.25.108.11 120.25.115.19 203.107.6.88 && /sbin/hwclock -w
说明:这里使用了多个ntp服务器IP,这样可以保证可靠性,因为通常一个域名形式的ntp,实际上可以解析出多个ip,而其实中测试发现,并不是解析出的每一个ip都可用,因此,通过多ip的方式,可以有效排错,消除时间获取出错而导致系统时间归零的情况,hwclock -w将当前时间写回硬件时钟,这样就算在系统重启后,依然能保证时间不反弹
另外,因为ntpdate调整时间是直接调整,对高度依赖时间的应用可能会有潜在风险,所以在定时任务中更新频率不要太勤,每两天或者更长时间执行一次即可

附,常用ntp服务器

cn.pool.ntp.org 85.199.214.100 193.228.143.23 202.112.10.37
ntp1.aliyun.com 182.92.12.11
ntp4.aliyun.com 120.25.108.11
ntp2.aliyun.com 120.25.115.19
ntp6.aliyun.com 203.107.6.88
time1.aliyun.com
time2.aliyun.com
time3.aliyun.com
time4.aliyun.com
time5.aliyun.com
time.pool.aliyun.com

转载请注明:轻风博客 » Linux下使用NTP同步系统时间

喜欢 (0)or分享 (0)