十六、NTP服务

wangzhaoyang 发布于 5 天前 25 次阅读 网络工程中的Linux系统 无~ 1606 字


使用 timedatectl 命令

timedatectl 工具作为 systemd 系统和服务管理器的一部分发布,可让您查看和更改系统时钟的配置。您可以使用此工具更改当前的日期和时间,设置时区,或者启用与远程服务器自动同步系统时钟。

显示当前日期和时间

要显示当前的日期和时间,以及有关系统和硬件时钟配置的详细信息,请在没有附加命令行选项的情况下运行 timedatectl 命令:

timedatectl

这会显示本地和通用时间、当前使用的时区、网络时间协议(NTP)配置的状态,以及与 DST 相关的其他信息。

例 显示当前日期和时间

以下是一个不使用 NTP 将系统时钟与远程服务器同步的系统中 timedatectl 命令的输出示例:

~]$ timedatectl
   Local time: Mon 2016-09-16 19:30:24 CEST
 Universal time: Mon 2016-09-16 17:30:24 UTC
    Timezone: Europe/Prague (CEST, +0200)
   NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
   DST active: yes
 Last DST change: DST began at
         Sun 2016-03-31 01:59:59 CET
         Sun 2016-03-31 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
         Sun 2016-10-27 02:59:59 CEST
         Sun 2016-10-27 02:00:00 CET

timedatectl 不会立即注意到对 chronyntpd 状态的更改。如果更改了这些工具的配置或状态,请输入以下命令:

~]# systemctl restart systemd-timedated.service

更改当前时间

要更改当前时间,以 root 用户身份在 shell 提示符后输入以下内容:

timedatectl set-time HH:MM:SS

HH 替换为一小时,MM 替换为一分钟,SS 替换为秒,全部以两位数形式键入。

此命令同时更新系统时间和硬件时钟。结果类似于使用 date --sethwclock --systohc 命令。

如果启用了 NTP 服务,该命令将失败。

例 更改当前时间

要将当前时间更改为 11:26,以 root 用户身份运行以下命令:

~]# timedatectl set-time 23:26:00

默认情况下,系统配置为使用 UTC。要将您的系统配置为在本地时间维护时钟,以 root 用户身份使用 set-local-rtc 选项运行 timedatectl 命令:

timedatectl set-local-rtc boolean

要将您的系统配置为在本地时间维护时钟,请将 布尔值 替换为 yes (或者 y、ytruet1)。要将系统配置为使用 UTC,请将 布尔值 替换为 no (或者 n、nfalsef0)。默认选项为 no

更改当前日期

要更改当前日期,以 root 用户身份在 shell 提示符后输入以下内容:

timedatectl set-time YYYY-MM-DD

YYY 替换为四位数年,MM 替换为两位数月,DD 替换为每月的两位数。

请注意,在不指定当前时间的情况下更改日期会导致将时间设置为 00:00:00。

例 3.3. 更改当前日期

要将当前日期更改为 2017 年 6 月 2 日并保留当前时间(下午 11:26),以 root 用户身份运行以下命令:

~]# timedatectl set-time "2017-06-02 23:26:00"

更改时区

要列出所有可用时区,在 shell 提示符后输入以下内容:

timedatectl list-timezones

要更改当前使用的时区,以 root 用户身份输入

timedatectl set-timezone time_zone

使用 time datectl list-timezones 命令列出的任何值替换 time _zone

例 更改时区

要确定哪一个时区与您当前位置最接近,请使用 timedatectl 命令和 list-timezones 命令行选项。例如,要列出欧洲所有可用时区,请输入:

~]# timedatectl list-timezones | grep Europe
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
…

要将时区更改为 欧洲/地区,root 用户身份输入

~]# timedatectl set-timezone Europe/Prague

将系统时钟与远程服务器同步

与前面部分所述的手动调整不同,timedatectl 命令还允许您使用 NTP 协议自动与一组远程服务器同步系统时钟。启用 NTP 可启用 chronydntpd 服务,具体取决于安装了哪些服务。

使用以下命令可以启用或禁用 NTP 服务:

timedatectl set-ntp boolean

要让您的系统能够将系统时钟与远程 NTP 服务器同步,请将 布尔值 替换为 yes (默认选项)。要禁用此功能,请将 布尔值 替换为 no

例 将系统时钟与远程服务器同步

要启用与远程服务器自动同步系统时钟,请输入:

~]# timedatectl set-ntp yes

Chrony

1. 安装Chrony服务

在Red Hat系统中,您可以使用yum包管理器来安装Chrony服务:

sudo yum install chrony

2. 配置Chrony服务

编辑Chrony的配置文件/etc/chrony.conf,添加或修改以下内容:

# 允许所有客户端请求时间同步
allow all

# 设置服务器的stratum级别
local stratum 10

# 指定上游NTP服务器
server pool.ntp.org iburst

如果您希望服务器仅在内部网络中提供时间服务,可以将allow all更改为指定的网络范围,例如:

allow 192.168.1.0/24

3. 启动Chrony服务

启动Chrony服务,并设置为开机启动:

sudo systemctl start chronyd
sudo systemctl enable chronyd

4. 检查Chrony服务状态

使用以下命令检查Chrony服务的状态:

sudo systemctl status chronyd

5. 同步时间

如果您的服务器时间不准确,可以使用以下命令强制同步时间:

sudo chronyc makestep

6. 配置防火墙

如果您的服务器运行了防火墙,确保UDP端口123是开放的,因为NTP使用这个端口进行通信:

sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload

7. 其他客户端使用您的NTP服务器

其他客户端可以配置它们的NTP客户端软件,将您的服务器IP作为上游NTP服务器。例如,在/etc/ntp.conf中添加:

server 你的服务器IP iburst

然后重启NTP服务:

sudo systemctl restart ntpd

或者对于使用Chrony的客户端:

sudo systemctl restart chronyd

确保您的服务器时间准确,并且网络配置允许外部访问(如果您希望提供公网服务)。如果您的服务器仅用于内部网络,确保内部网络的防火墙和路由器设置允许NTP流量到达您的服务器。