设置NTP时间同步和timedatectl命令

-- TOC --

NTP服务器(Network Time Protocol)是用来使计算机时间同步化的一种协议,它可以使计算机的时间跟其它服务器或时钟源(如石英钟,GPS等等)保持同步,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可通过加密确认的方式来防止恶毒的协议攻击。今天NTP协议已经发展到V4版本,V1版本在1988年6月推出,主要RFC为RFC1059,今天我们大规模使用的V4版本的NTP,还没有正式的RFC出版,但是简单的协议内容,在RFC2030里已有描述。

NTP

NTP时间同步非常必要的,对于服务器来说,如果时间不准,会有很多麻烦。例如,支付的时候,无法下单,游戏无法登录等。自己用的PC也不是无所谓,比如在使用git push的时候,至少要确保时间的正确,否则你的log看着会时间都是不对的。

#安装ntp软件包
$ sudo yum -y install ntp
设置开机自启动
$ sudo systemctl enable ntpd
手动启动ntpd进程
$ sudo systemctl start ntpd
设置时区
$ sudo timedatectl set-timezone Asia/Shanghai
对时
$ sudo ntpdate -u time.nist.gov

time.nist.gov是美国NIST提供的时间同步服务器,Windows的时间同步也有这个选项。

其实,我觉得对时这个步骤是可以不需要的,ntpd起来后一段时间,自然会跟配置文件中的服务器进行对时。我看到还有人在cron里面定时跑ntpdate这个命令,感觉也是没有必要的。

注意:NTP服务端重启后,客户机要等5分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。

设置系统时间NTP同步

$ sudo timedatectl set-ntp true

这个命令下去后,请再用timedatectl命令查看一下NTP时间同步的状态,要看到两个yes,具体请参考timedatectl命令介绍。

查看NTP时间同步状态

$ ntpstat
synchronised to NTP server (218.186.3.36) at stratum 2
time correct to within 11269 ms
polling server every 1024 s

另一个查看ntpd进程运行状态的命令

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 103.47.76.177   195.66.241.3     2 u  665 1024  357    3.206  11243.0 6009.45
 time3.maxonline .GPS.            1 u  704 1024   77    3.197  11243.0 6009.76
 ns-vultr.nono.i 218.73.139.35    2 u 1532 1024  276    2.602  11245.5 6007.90
 time1.maxonline .GPS.            1 u  749 1024  377    3.061  11242.8 4249.28

st:即stratum阶层,值越小表示ntp serve的精准度越高;
when:几秒前曾做过时间同步更新的操作;
Poll表示,每隔多少毫秒与ntp server同步一次;
reach:已经向上层NTP服务器要求更新的次数;
delay:网络传输过程钟延迟的时间;
offset:时间补偿的结果;
jitter:Linux系统时间与BIOS硬件时间的差异时间

NTP服务的配置文件

$ cat /etc/ntp.conf

应该是可以在这个文件里面配置自己选择的NTP服务器,CentOS默认使用了自己提供的服务器。

时间不对怎么办

虚拟机暂停长时间后再重新运行,可能系统时间已经不对了,这时可以重启ntp进程,以保持系统时间正确:

$ systemctl restart ntpd

timedatectl命令

timedatectl命令是一个比较新的时间管理工具,它作为systemd系统和服务管理器的一部分(*ctl风格),用来代替旧的传统的用在基于Linux分布式系统的sysvinit守护进程的date命令。timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。

显示系统时间信息

$ timedatectl
Local time: Sat 2019-08-17 17:34:00 CST
Universal time: Sat 2019-08-17 09:34:00 UTC
RTC time: Sat 2019-08-17 09:34:00
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
$ timdatectl status

加上status参数,显示完全一样。

timdatectl显示出来的信息,比date要丰富很多。有本地时间,UTC时间,RTC时间(硬件时间),还有时区,NTP同步等信息。

查看所有可用时区

$ timedatectl list-timezones

这个命令的显示很长,如果是寻找时区的名称,可以通过管道给grep过滤:

$ timedatectl list-timezones | grep Shang
Asia/Shanghai

或者这样:

$ timedatectl list-timezones | grep -o "Asia/S.*"
Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk

设置服务器的时区

$ timedatectl set-timezone "Asia/Shanghai"

设置系统日期和时间

$ timedatectl set-time HH:MM:SS

HH:MM:SS 就是小时,分,秒的时间格式。

$ timedatectl set-time '16:10:40 2015-11-20'

设置系统日期为2015年11月20日,时间为下午16点10分40秒。

设置同步NTP时间

$ timedatectl set-ntp true

取消NTP时间同步,就是 timedatectl set-ntp false。NTP时间同步进程要单独安装。

我们可以这样来检查NTP同步的设置是否成功:

$ timedatectl
Local time: Sat 2019-08-17 17:55:41 CST
Universal time: Sat 2019-08-17 09:55:41 UTC
RTC time: Sat 2019-08-17 09:55:41
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a

要看到两个yes才行。NTP enabled:yes表示 timedatectl set-ntp true,NTP synchronized:yes表示ntpd进程正在正常运行。

以上就是关于Linux系统下timedatectl命令的介绍。

本文链接:https://cs.pynote.net/sf/linux/sys/202204133/

-- EOF --

-- MORE --