我必须读取 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。