You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python获取系统NTP同步状态及已同步的NTP服务器源信息

解决方案

实现思路

  • 你之前用到的org.freedesktop.timedate1 D-Bus接口本身就可以直接获取NTP服务启用状态、是否同步成功两个核心状态
  • 如果你的系统用默认的systemd-timesyncd作为NTP客户端(绝大多数带systemd的Linux发行版默认配置),可以直接访问org.freedesktop.timesync1的D-Bus接口获取当前同步的服务器地址,完全不需要依赖外部工具

完整代码示例

import pydbus

# 连接系统总线
system_bus = pydbus.SystemBus()

# 获取timedate1对象,读取基础NTP状态
timedated = system_bus.get(".timedate1")
ntp_enabled = timedated.NTPEnabled
ntp_synced = timedated.NTPSynchronized

print(f"NTP服务状态:{'已启用' if ntp_enabled else '已禁用'}")
print(f"NTP同步状态:{'已同步' if ntp_synced else '未同步'}")

# 同步成功时读取当前使用的NTP服务器地址
if ntp_synced:
    try:
        # 访问systemd-timesyncd的D-Bus接口
        timesyncd = system_bus.get("org.freedesktop.timesync1", "/org/freedesktop/timesync1")
        server_addr = timesyncd.CurrentServerAddress
        # 字节数组转标准IP字符串格式
        if len(server_addr) == 4:
            ip_str = ".".join(str(b) for b in server_addr)
        else:
            # IPv6地址转换
            ip_str = ":".join(f"{server_addr[i]:02x}{server_addr[i+1]:02x}" for i in range(0, 16, 2))
        print(f"已同步到NTP服务器({ip_str})")
    except Exception:
        # 非systemd-timesyncd场景兜底,读取NTP配置文件拿配置的源列表
        for config_path in ["/etc/chrony.conf", "/etc/ntp.conf", "/etc/systemd/timesyncd.conf"]:
            try:
                with open(config_path, "r") as f:
                    servers = []
                    for line in f:
                        line = line.strip()
                        if not line or line.startswith("#"):
                            continue
                        if line.startswith(("server ", "pool ", "NTP=")):
                            servers.append(line.split()[1] if "=" not in line else line.split("=")[1])
                    if servers:
                        print(f"当前配置的NTP源列表:{'、'.join(servers)}")
                        break
            except:
                continue
        else:
            print("无法识别当前NTP客户端,暂无法读取NTP源信息")

注意事项

  • 上述代码仅依赖pydbus库,不需要系统安装ntpstat、chronyc等任何NTP相关的命令行工具
  • 如果你的系统使用chrony、ntpd等非默认NTP客户端,也可以根据实际客户端类型调整配置文件解析逻辑,不需要额外依赖

内容的提问来源于stack exchange,提问作者BDubs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:36:00