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