在服务器的日常运维中,确保系统时间的准确性至关重要。错误的时间可能导致日志记录混乱、安全认证失败以及各类服务运行异常等问题。Centos、Ubuntu 和 Debian 作为常用的 Linux 操作系统,各自有着不同的时间同步方式和命令。本文将详细介绍这三个系统下同步服务器时间的方法和具体配置命令,同时针对 UDP 协议被关闭导致无法同步的情况提供解决方案。
一、Centos 系统时间同步
Centos 系统默认使用chrony服务进行时间同步,chrony是一个开源的时间同步程序,能够快速且精准地同步系统时间。
1. 检查chrony服务状态
在进行时间同步操作前,先检查chrony服务是否已安装并处于运行状态,使用以下命令:
systemctl status chronyd
若服务未安装,可通过yum包管理器进行安装:
sudo yum install chrony
2. 配置chrony
chrony的配置文件为/etc/chrony.conf,可以使用文本编辑器打开并修改。以vim编辑器为例:
sudo vim /etc/chrony.conf
在配置文件中,默认会有一些公共的时间服务器地址,如:
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
你也可以添加其他可靠的时间服务器,例如阿里云的 NTP 服务器:
server ntp.aliyun.com iburst
修改完成后,保存并关闭文件。
3. 重启chrony服务
使配置生效需要重启chrony服务,执行以下命令:
sudo systemctl restart chronyd
4. 验证时间同步
使用chronyc sources -v命令查看时间同步源的状态,若显示^*标记,表示该服务器为当前同步的时间源:
chronyc sources -v
使用date命令查看系统时间是否已更新为正确时间:
date
二、Ubuntu 系统时间同步
Ubuntu 系统从 16.04 版本开始,默认使用systemd-timesyncd服务进行时间同步,当然也可以使用ntp或chrony程序。这里先介绍systemd-timesyncd的使用方法,再补充chrony的操作。
1. 启用systemd-timesyncd服务
使用以下命令启用并设置开机自启systemd-timesyncd服务:
sudo systemctl enable --now systemd-timesyncd
2. 配置时间服务器
systemd-timesyncd的配置文件为/etc/systemd/timesyncd.conf,使用文本编辑器打开:
sudo vim /etc/systemd/timesyncd.conf
取消NTP=行的注释,并添加或修改为想要使用的时间服务器,例如:
NTP=ntp.ubuntu.com ntp.aliyun.com
保存并关闭文件后,重新加载配置:
sudo systemctl restart systemd-timesyncd
3. 验证时间同步
使用timedatectl status命令查看时间同步状态,其中NTP synchronized显示为yes表示同步成功:
timedatectl status
使用date命令查看当前系统时间。
补充:使用chrony同步时间
若想使用chrony,安装命令为:
sudo apt install chrony
后续的配置、重启和验证步骤与 Centos 系统中chrony的操作基本一致。
三、Debian 系统时间同步
Debian 系统同样可以使用systemd-timesyncd或chrony进行时间同步,下面分别介绍两种方式的操作。
1. 使用systemd-timesyncd同步时间
启用并设置开机自启systemd-timesyncd服务:
sudo systemctl enable --now systemd-timesyncd
修改配置文件/etc/systemd/timesyncd.conf,添加或修改时间服务器,操作与 Ubuntu 系统中相同:
sudo vim /etc/systemd/timesyncd.conf
修改完成后重新加载配置:
sudo systemctl restart systemd-timesyncd
使用timedatectl status命令验证时间同步状态,使用date命令查看系统时间。
2. 使用chrony同步时间
安装chrony:
sudo apt-get install chrony
修改chrony配置文件/etc/chrony.conf,添加或修改时间服务器,然后重启chrony服务:
sudo systemctl restart chronyd
最后使用chronyc sources -v和date命令验证时间同步情况。
四、UDP 协议被关闭时的时间同步解决方案
网络时间协议(NTP)通常基于 UDP 协议进行数据传输,若 UDP 协议被关闭,会导致时间同步失败。以下是针对这种情况的解决方法:
1. 排查 UDP 协议关闭原因
首先,需要确定 UDP 协议被关闭的原因。可以通过检查防火墙规则、网络策略配置等方式进行排查。
检查防火墙规则:
sudo firewall-cmd --list-all
若发现 UDP 协议的相关端口(NTP 默认使用 123 端口)被禁止,可执行以下命令开放端口:
sudo firewall-cmd --permanent --add-port=123/udp
sudo firewall-cmd --reload
sudo ufw status
开放 NTP 端口的命令为:
sudo ufw allow 123/udp
- 在 Centos 系统中,若使用firewalld防火墙,执行以下命令查看相关规则:
- 在 Ubuntu 和 Debian 系统中,若使用ufw防火墙,执行以下命令查看规则:
- 检查网络策略配置:检查服务器所在网络的策略配置文件,查看是否存在禁止 UDP 协议的相关设置,根据实际情况进行修改。
2. 临时解决方案:使用 TCP 协议的 NTP 服务
部分 NTP 服务器支持通过 TCP 协议进行时间同步。以chrony为例,在配置文件/etc/chrony.conf中,将时间服务器地址修改为支持 TCP 的 NTP 服务器,并指定使用 TCP 协议,例如:
server ntp.example.com iburst prefer tcp
修改完成后,重启chrony服务使配置生效:
sudo systemctl restart chronyd
这种方式可以在 UDP 协议暂时无法启用的情况下,实现时间同步,但 TCP 协议相对 UDP 协议在时间同步方面可能存在一定的延迟。
3. 长期解决方案:恢复 UDP 协议正常使用
若 UDP 协议是因为误操作或其他原因被关闭,应从根源上解决问题,恢复 UDP 协议的正常使用。例如,如果是因为安全策略错误禁用了 UDP 协议,需要与网络管理员沟通,重新评估和调整安全策略,确保 UDP 协议能够正常工作,以保证 NTP 服务的稳定运行。
通过以上方法,你可以在 Centos、Ubuntu 和 Debian 系统中顺利完成服务器时间的同步,并解决 UDP 协议被关闭时遇到的问题。在实际操作中,若还有其他疑问或遇到新的问题,欢迎随时和我交流。


