跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    时间同步 (chrony)

    精准的系统时间对于日志记录、证书验证、分布式系统协调等场景至关重要。EL 系发行版默认使用 chrony 作为 NTP 客户端和服务端,取代了传统的 ntpd。本文将介绍 chrony 的安装配置、NTP 源管理、时区设置以及硬件时钟同步。

    特性chronyntpd
    同步速度快速收敛,适合间歇性网络收敛较慢,需要持续连接
    资源占用低内存、低 CPU相对较高
    虚拟机支持优秀,适应时钟漂移一般
    EL 默认EL 7+ 默认EL 6 默认,EL 8+ 已移除
    精度微秒级毫秒级

    在 EL 8/9/10 中,ntpd 已从默认仓库移除,chrony 是唯一推荐的 NTP 实现(EL 10 上同样如此,命令与配置基本不变)。

    EL 系发行版通常默认已安装 chrony。如果没有,可以手动安装:

    安装 chrony
    sudo dnf install chrony -y
    启动并设为开机自启
    sudo systemctl start chronyd
    sudo systemctl enable chronyd
    确认服务状态
    sudo systemctl status chronyd
    查看当前 NTP 源列表
    chronyc sources -v

    输出中各列含义:

    • ^* — 当前正在使用的源(已同步)
    • ^+ — 合格的备选源
    • ^- — 不合格的源
    • ^? — 连接中或状态未知
    查看时间同步详细状态
    chronyc tracking

    关注以下字段:

    • System time — 系统时钟与 NTP 的偏移量
    • Last offset — 上一次调整的偏移量
    • RMS offset — 偏移的均方根值
    • Frequency — 时钟频率偏差 (ppm)
    查看 NTP 源统计数据
    chronyc sourcestats -v

    chrony 的主配置文件位于 /etc/chrony.conf。

    查看当前配置
    cat /etc/chrony.conf

    默认配置通常指向发行版的 NTP 池。可以根据需要修改为其他服务器:

    备份原配置
    sudo cp /etc/chrony.conf /etc/chrony.conf.bak
    编辑 chrony 配置文件
    sudo vi /etc/chrony.conf

    常见的 NTP 服务器配置示例:

    /etc/chrony.conf 示例
    # 使用国内 NTP 服务器
    server ntp.aliyun.com iburst
    server ntp.tencent.com iburst
    server ntp.ntsc.ac.cn iburst
    # 或使用全球 NTP 池
    pool 2.pool.ntp.org iburst
    # 记录时钟漂移
    driftfile /var/lib/chrony/drift
    # 允许系统时钟在前三次更新时大幅跳跃
    makestep 1.0 3
    # 启用内核时钟同步
    rtcsync
    # 日志目录
    logdir /var/log/chrony

    关键指令说明:

    • server — 指定单个 NTP 服务器
    • pool — 指定 NTP 服务器池(自动解析多个地址)
    • iburst — 初始同步时发送突发请求,加快同步速度
    • makestep — 允许在指定条件下大幅调整时间(参数:阈值秒数 + 允许次数)
    • rtcsync — 每 11 分钟将系统时间写入硬件时钟
    修改后重启 chronyd
    sudo systemctl restart chronyd
    验证新的 NTP 源是否生效
    chronyc sources

    如果需要让本机为内网其他主机提供时间同步服务:

    在 chrony.conf 中添加允许的客户端网段
    echo 'allow 192.168.1.0/24' | sudo tee -a /etc/chrony.conf
    重启服务并放行防火墙
    sudo systemctl restart chronyd
    sudo firewall-cmd --permanent --add-service=ntp
    sudo firewall-cmd --reload

    timedatectl 是 systemd 提供的时间和时区管理工具。

    查看系统时间和时区状态
    timedatectl status
    列出所有可用时区
    timedatectl list-timezones
    筛选亚洲时区
    timedatectl list-timezones | grep Asia
    设置时区为中国标准时间
    sudo timedatectl set-timezone Asia/Shanghai
    设置为 UTC 时区
    sudo timedatectl set-timezone UTC
    启用 NTP 自动同步
    sudo timedatectl set-ntp true
    禁用 NTP 同步(用于手动设置时间)
    sudo timedatectl set-ntp false

    在禁用 NTP 同步后,可以手动设置系统时间:

    手动设置日期和时间
    sudo timedatectl set-time '2026-03-25 14:30:00'

    硬件时钟(RTC)是主板上的独立时钟,系统关机后仍然运行。

    查看硬件时钟时间
    sudo hwclock --show
    将系统时间写入硬件时钟
    sudo hwclock --systohc
    将硬件时钟写入系统时间
    sudo hwclock --hctosys
    设置硬件时钟为 UTC
    sudo hwclock --systohc --utc

    在配置了 rtcsync 指令后,chrony 会自动每 11 分钟将系统时间同步到硬件时钟,通常不需要手动操作。

    如果系统时间偏差较大,需要立即校正:

    强制立即同步时间
    sudo chronyc makestep

    该命令会立刻将系统时间调整为 NTP 源的时间,无论偏差大小。

    检查 chronyd 是否在运行
    systemctl is-active chronyd
    检查防火墙是否放行 NTP (UDP 123)
    sudo firewall-cmd --list-services | grep ntp
    检查网络连通性
    chronyc activity
    查看 chronyd 的 journal 日志
    journalctl -u chronyd --no-pager -n 50
    查看系统时间偏移
    chronyc tracking | grep "System time"

    偏移量(offset)应该在毫秒或微秒级别。如果偏移量过大(超过数秒),可以使用 chronyc makestep 强制同步。

    1. 保持 chrony 为默认时间服务:不要在 EL 8/9/10 上安装 ntpd
    2. 使用地理位置较近的 NTP 源:减少网络延迟,提高同步精度
    3. 配置多个 NTP 源:至少配置 3-4 个源以确保冗余
    4. 使用 iburst 选项:加快初始同步速度
    5. 保留 makestep 配置:允许启动时进行大幅时间调整
    6. 启用 rtcsync:保持硬件时钟同步
    7. 监控时间偏移:将 chronyc tracking 纳入监控系统