一、安装NTP服务
- 安装并配置 NTP 服务:
- 安装 NTP 客户端,执行命令
yum install -y ntp
。 - 编辑 NTP 配置文件
/etc/ntp.conf
,添加或修改 NTP 服务器,例如使用国内常用的 NTP 服务器cn.pool.ntp.org
,在文件中添加一行server cn.pool.ntp.org
。也可以使用全球 NTP 服务器池pool.ntp.org
,即添加server pool.ntp.org
。 - 重启 NTP 服务,让配置生效,命令为
systemctl restart ntpd
。 - 可以设置 NTP 服务开机自启,执行
systemctl enable ntpd
。 在 CentOS 系统中,让 NTP 服务开机自启可以按照以下步骤进行:
- 确保 NTP 服务已安装:执行命令
rpm -qa | grep ntp
,检查 NTP 是否已经安装。如果没有安装,可以使用yum install -y ntp
命令进行安装5。 - 设置开机自启:使用
systemctl
命令设置 NTP 服务开机自启,执行systemctl enable ntpd
。执行命令后,系统会将 NTP 服务设置为开机自启状态123。 - 检查自启设置是否成功:执行
systemctl is-enabled ntpd
命令,如果输出为enabled
,则表示 NTP 服务开机自启设置成功1。 -
此外,如果系统中安装了
chrony
服务,它可能会与ntp
服务冲突,导致ntp
服务开机自启失败。可以执行systemctl status chronyd
查看chrony
服务状态,若处于运行状态,执行systemctl stop chronyd
停止该服务,并执行systemctl disable chronyd
禁止其开机自启7。 [root@localhost ~]# systemctl stop chronyd [root@localhost ~]# systemctl disable chronyd Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.
从你执行的命令和得到的输出结果来看,你已经成功停止并禁用了
chronyd
服务。Removed symlink /etc/systemd/system/multi-user.target.wants/chronyd.service.
这条信息表明系统已经移除了chronyd
服务在multi-user.target.wants
目录下的符号链接,也就意味着chronyd
服务不会在开机时自动启动了。接下来你可以继续按照之前的步骤操作,确保
ntpd
服务正常运行并设置为开机自启,以便让系统时间能够通过 NTP 服务器进行同步。- 确保
ntpd
服务已启动:
执行systemctl start ntpd
命令来启动ntpd
服务。 - 检查
ntpd
服务状态:
使用systemctl status ntpd
命令查看ntpd
服务是否成功启动并运行正常。 - 手动同步时间:
安装ntpdate
工具(如果未安装,执行yum install -y ntpdate
),然后使用ntpdate 时间服务器地址
来手动同步时间,例如ntpdate cn.pool.ntp.org
。 -
如果一切顺利,你的系统时间应该能够正确同步并在后续保持更新了。
- 检查时间同步状态:
再次执行timedatectl
命令,查看NTP synchronized
状态是否变为yes
,确认时间是否能正常自动更新。 systemctl status ntpd ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled) Active: active (running) since 三 2025-03-12 13:21:24 CST; 3s ago Process: 21387 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 21388 (ntpd) Tasks: 1 Memory: 1.4M CGroup: /system.slice/ntpd.service └─21388 /usr/sbin/ntpd -u ntp:ntp -g 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listen normally on 9 ens33 fe80::9fd:4449:eb46:c7c6 UDP 123 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listen normally on 10 vethd1f3e94 fe80::9457:1dff:fea7:b6f8 UDP 123 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listen normally on 11 vethcc55d74 fe80::3493:18ff:fe20:1387 UDP 123 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listen normally on 12 vethb0d2b1e fe80::3c38:96ff:fe8b:d3f UDP 123 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listen normally on 13 veth2c0f7ac fe80::d0be:53ff:fe0d:1aac UDP 123 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listen normally on 14 br-8e7438411b24 fe80::42:efff:fe02:c759 UDP 123 3月 12 13:21:24 localhost.nnhh ntpd[21388]: Listening on routing socket on fd #31 for interface updates 3月 12 13:21:24 localhost.nnhh ntpd[21388]: 0.0.0.0 c016 06 restart 3月 12 13:21:24 localhost.nnhh ntpd[21388]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM 3月 12 13:21:24 localhost.nnhh ntpd[21388]: 0.0.0.0 c011 01 freq_not_set
从
systemctl status ntpd
的输出结果来看,ntpd
服务已经成功启动并正在运行(Active: active (running)
)。这是一个好的进展,接下来你可以进一步确认时间是否已经成功同步:查看 NTP 同步状态:
执行timedatectl
命令,查看NTP synchronized
字段的值。如果显示为yes
,说明系统已经成功通过 NTP 服务器同步了时间。如果显示为no
,可以继续执行下一步手动同步时间。手动同步时间:
安装ntpdate
工具(如果还未安装,执行yum install -y ntpdate
),然后使用ntpdate
命令手动同步时间。例如:-
bash
ntpdate cn.pool.ntp.org
或者使用其他可用的 NTP 服务器地址,如
pool.ntp.org
等。 再次检查时间和 NTP 同步状态:
手动同步时间后,再次执行date
命令查看当前系统时间是否正确,以及执行timedatectl
命令查看NTP synchronized
字段是否变为yes
。等待自动同步(如果手动同步成功):
如果手动同步时间成功且NTP synchronized
变为yes
,那么ntpd
服务会在后续按照其默认的时间间隔自动与 NTP 服务器进行时间同步。你可以等待一段时间后再次检查时间是否仍然准确。-
如果在上述步骤中遇到任何问题,比如手动同步时间失败或
NTP synchronized
始终无法变为yes
,可以继续检查ntpd
的配置文件(/etc/ntp.conf
)中 NTP 服务器的设置是否正确,以及网络连接是否正常等情况。 ntp.conf文件配置
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict ::1# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server cn.pool.ntp.org iburst
server time.nist.gov.cn iburst
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
- 安装 NTP 客户端,执行命令
- 手动同步时间并更新硬件时钟:
- 若不想使用 NTP 服务,也可以手动同步时间。先安装
ntpdate
,执行yum install -y ntpdate
。 - 然后使用
ntpdate 时间服务器地址
来同步时间,如ntpdate time.nist.gov
,若该服务器同步不了,可尝试0.asia.pool.ntp.org
、1.asia.pool.ntp.org
等。 - 同步完系统时间后,将系统时间写入硬件时钟,执行
hwclock --systohc
。
- 若不想使用 NTP 服务,也可以手动同步时间。先安装
- 检查虚拟机设置(如果是虚拟机环境):
- 部分虚拟机软件(如 VMware),有与宿主机时间同步的选项。以 VMware 为例,选中虚拟机,点击 “虚拟机” 菜单,选择 “设置”,在弹出窗口中找到 “选项”,点击 “时间”,勾选 “与主机时间同步” 。
- 检查硬件时钟电池(较少见情况):如果是物理机,系统时间不准确可能是硬件时钟(RTC)电池电量不足或损坏导致。打开机箱,找到主板上的纽扣电池,更换为同型号新电池,然后进入 BIOS 设置界面,将时间设置为正确值 。
二、检查时区
1.查看当前时区
执行命令 timedatectl
,在输出信息中找到 Timezone
对应的内容,这就是当前系统时区。比如输出中可能有类似 Timezone: Asia/Shanghai
这样的信息,就表示当前时区是上海时区。
设置时区
如果当前时区不对,使用以下命令设置:
- 使用
timedatectl
命令:
比如要设置为上海时区,命令是timedatectl set-timezone Asia/Shanghai
。 - 通过复制时区文件设置:
可以直接复制相应的时区文件到/etc/localtime
来设置时区。例如设置为上海时区,执行命令cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
。
设置完时区后,可以再次使用 timedatectl
命令确认时区是否设置正确,也可以用 date
命令查看时间显示是否符合预期。
[root@localhost ~]# timedatectl Local time: 三 2025-03-12 13:16:02 CST Universal time: 三 2025-03-12 05:16:02 UTC RTC time: 三 2025-03-12 05:31:21 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
NTP synchronized
(NTP 同步状态)显示为 no
,即没有成功通过网络时间协议(NTP)同步时间,这可能是时间无法自动更新的原因。
1. 检查 NTP 服务状态
执行命令 systemctl status ntpd
(若系统未安装 NTP,先执行 yum install -y ntp
进行安装),查看 NTP 服务是否已启动且运行正常。如果服务未启动,执行 systemctl start ntpd
启动服务;如果服务状态异常,可以尝试重启 NTP 服务,命令是 systemctl restart ntpd
。
2. 手动同步 NTP 时间
安装 ntpdate
工具(如果未安装,执行 yum install -y ntpdate
),然后使用 ntpdate 时间服务器地址
来手动同步时间。例如:
- 使用中国国家授时中心的服务器同步时间,命令为
ntpdate time.nist.gov.cn
。 - 也可以使用全球 NTP 服务器池,如
ntpdate pool.ntp.org
。
3. 设置 NTP 自动同步
确保 NTP 服务开机自启,执行命令 systemctl enable ntpd
,这样系统每次开机时会自动启动 NTP 服务并尝试同步时间。
4. 检查防火墙设置
如果 NTP 服务还是无法同步时间,可能是防火墙阻挡了 NTP 协议的端口(UDP 123 端口)。检查防火墙规则,若使用的是 firewalld
,执行 firewall-cmd --list-ports
查看已开放的端口列表,若没有 123/UDP 端口,执行 firewall-cmd --permanent --add-port=123/UDP
开放端口,然后重启防火墙 firewall-cmd --reload
。
完成上述操作后,等待一段时间,再次执行 timedatectl
命令查看 NTP synchronized
状态是否变为 yes
,确认时间是否能正常自动更新。
[root@localhost ~]# systemctl status ntpd ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@localhost ~]#
分享
从输出结果可知,NTP 服务处于未激活(inactive (dead)
)状态,这就是时间无法通过 NTP 同步的原因。