在Ubuntu系统部署NTP服务

NTP是网络同步时间的TCP/IP协议。通常客户端会从服务器请求当前时间,并使用获取到的时间设置本地时钟。

注意:从Ubuntu 16.04开始timedatectltimesyncd(属于systemd的部分)代替了以往常用的ntpdatentp工具。

timesyncd不仅默认提供,并且取代了ntpdate以及chrony(用于取代ntpd的服务)的客户端。以前通过启动时使用ntpdate命令来矫正时间,现在只需要默认启动的timesyncd来完成并保持本地时间同步。

如果安装了chrony,则timedatectl将让chrony来实现时间同步。这样可以确保不会同时运行两个时间同步服务。

ntpdate今后将在未来的timedatectl(或者chrony)中去除,并且默认不再安装。timesyncd则用于常规的时钟同步,而chrony则处理更为复杂的案例。

如果想要矫正时间,可以使用如下命令:

chronyd -q

如果只是检查时间,但是不设置时钟,则使用

chronyd -Q

配置timedatectltimesyncd

  • 使用timedatectl status可以检查时钟情况:

$ timedatectl status
      Local time: Tue 2018-05-01 21:54:24 CST
  Universal time: Tue 2018-05-01 13:54:24 UTC
        RTC time: Tue 2018-05-01 13:54:24
       Time zone: Asia/Shanghai (CST, +0800)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no
  • 使用systemctl status systemd-timesyncd可以检查时钟同步情况:

/etc/systemd/timesyncd.conf设置了timedatectltimesyncd获取时钟值的名字服务器,并且详细的配置文件可以在/etc/systemd/timesyncd.conf.d/目录下找到。

/etc/systemd/timesyncd.conf中配置了timedatectl访问的服务器,这里配置了局域网中自建的chronyd之间服务(具体配置见后文)

然后重启systemd-timesyscd服务

再次检查systemctl status systemd-timesyncd,就可以看到和指定NTP服务器同步时间:

设置网络时间协议的服务

在Ubuntu平台,有多个软件可以实现网络时间服务,如chronyntpdopen-ntp。建议使用chrony.

chrony(d)

NTP服务chronyd计算系统时钟的drift和offset并持续修正。如果长时间不能连接网络NTP服务器,也可以保证时钟不偏移。该服务只消耗很少的处理能力和内存,在现代服务器硬件环境这个消耗往往可以忽略。

  • 安装

chrony软件包包含2个执行程序:

  • chronyd - 通过NTP协议提供时间同步的服务

  • chronyc - 命令行和chrony服务交互的接口

  • chronyd配置

编辑/etc/chrony/chrony.conf添加服务配置行:

注意:一定要配置一行allow 192.168.0.0/24,否则chronyd服务启动后不会监听任何端口

  • 启动服务

  • 检查状态

配置ufw

对于启动了ufw防火墙配置的Ubuntu服务器,需要添加端口允许:

参考

Last updated

Was this helpful?