systemd-timesyncd.service 是否可以通过 dbus api 访问?

systemd-timesyncd.service 是否可以通过 dbus api 访问?

我必须读取 systemd-timesyncd.service 的状态,看看它是否已与 ntp 同步。系统时钟同步标志没有帮助,因为它没有显示适当的信息

答案1

有一个 DBUS。请参阅开发人员文档。他们有这个作为例子:

$ gdbus introspect --system --dest org.freedesktop.timedate1 --object-path /org/freedesktop/timedate1
node /org/freedesktop/timedate1 {
  interface org.freedesktop.timedate1 {
    methods:
      SetTime(in  x usec_utc,
              in  b relative,
              in  b user_interaction);
      SetTimezone(in  s timezone,
                  in  b user_interaction);
      SetLocalRTC(in  b local_rtc,
                  in  b fix_system,
                  in  b user_interaction);
      SetNTP(in  b use_ntp,
             in  b user_interaction);
    signals:
    properties:
      readonly s Timezone = 'Europe/Berlin';
      readonly b LocalRTC = false;
      readonly b NTP = true;
  };
  interface org.freedesktop.DBus.Properties {
  };
  interface org.freedesktop.DBus.Introspectable {
  };
  interface org.freedesktop.DBus.Peer {
  };
};

也就是通过dbus来“设置”;而不是“获取”。

我必须读取状态systemd-timesyncd.service以查看它是否已与ntp同步

不过,这是一个完全不同的问题。与大多数(如果不是全部?)systemd 服务一样:它们使用底层程序来执行某些操作。systemd-timesyncd用途ntp,所以您的问题是...不正确。来自手册页:

systemd-timesyncd.list将在目录中查找扩展名为 的文件ntp-units.d/。每个文件都被解析为单元名称列表,每行一个。空行和带有注释(“#”)的行将被忽略。文件从 、 、 下的相应目录中读取。/etc//usr/lib/systemd/ntp-units.d/中的文件将覆盖、和中同名的文件。/run/ 中的文件将覆盖 下同名的文件。软件包应将其配置文件安装在(分发软件包)或(本地安装)中。/etc//run//usr/local/lib//run//usr/local/lib//usr/lib//usr//usr/lib//usr/local/lib/


你想要的都可以用

timedatectl 

命令。

timedatectl 可用于显示时间同步服务的当前状态,例如systemd-timesyncd.service

地位 显示系统时钟和 RTC 的当前设置,包括网络时间同步是否处于活动状态。如果未指定命令,则这是隐含的默认值。

展示 显示与 status 相同的信息,但采用机器可读的形式。此命令旨在用于需要计算机可解析输出的情况。如果您要寻找格式化的人类可读输出,请使用 status。

相关内容