当chrony步进时钟时运行脚本



在系统时钟被crony正确步进后,我需要启动某个服务

系统时间由chrony(chronyd (chrony) version 3.5 (+CMDMON +NTP +REFCLOCK +RTC -PRIVDROP -SCFILTER -SIGND +ASYNCDNS -SECHASH +IPV6 -DEBUG)(维护。

Chrony设置(如果相关(为:

server 192.168.100.1 trust minpoll 2 maxpoll 4 polltarget 30
refclock PPS /dev/pps0 refid KPPS trust lock GNSS maxdispersion 3 poll 2
refclock SOCK /var/run/chrony.sock refid GNSS maxdispersion 0.2 noselect
makestep 0.1 -1
driftfile /var/lib/chrony/drift
rtcsync

";正常跟踪状态";是:

/ # chronyc tracking
Reference ID    : C0A86401 (192.168.100.1)
Stratum         : 2
Ref time (UTC)  : Wed Dec 01 11:52:08 2021
System time     : 0.000004254 seconds fast of NTP time
Last offset     : +0.000000371 seconds
RMS offset      : 0.000011254 seconds
Frequency       : 17.761 ppm fast
Residual freq   : +0.001 ppm
Skew            : 0.185 ppm
Root delay      : 0.000536977 seconds
Root dispersion : 0.000051758 seconds
Update interval : 16.2 seconds
Leap status     : Normal

而";不同步的";(初始(状态为:

/ # chronyc tracking
Reference ID    : 00000000 ()
Stratum         : 0
Ref time (UTC)  : Thu Jan 01 00:00:00 1970
System time     : 0.000000000 seconds fast of NTP time
Last offset     : +0.000000000 seconds
RMS offset      : 0.000000000 seconds
Frequency       : 0.000 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 0.0 seconds
Leap status     : Not synchronised

我似乎记得每当stratus级别发生变化时,crony都可以调用脚本,但我找不到引用。

在任何情况下:有没有任何方法可以指示crony运行脚本/程序,或者在获取/丢失有效服务器的跟踪时发送一些信号?

我目前依赖的是一个相当丑陋的:while chronyc tracking | grep -q "Not synchronised"; do sleep 1; done,但最好是chronyd的主动信号。

详细信息:

  • 系统是一个运行Linux(Yocto(的(相对(小型物联网设备
  • 它没有RTC(它总是从时钟设置为Epoch开始(
  • 系统没有连接到Internet(最初(
  • 系统连接到具有GNSS的设备接收器,并由此导出正确的时间
  • GNSS可能需要很长一段时间(有时"非常"(才能获得修复,因此可能会传播时间
  • 在某个时刻,chrony终于找到了合适的时机并步进系统时钟。完成后,我需要启动一项服务(或者运行脚本或其他什么(
  • 我目前正在轮询chronyc tracking和解析状态,但这并不是很好

我本来想做同样的事情,但却两手空空。

然而,我确实找到了chronyc waitsync,它似乎是一种内置的轮询方式,无需显式解析和睡眠。这对我的情况来说已经足够好了,因为我只需要延迟一次启动操作。

该命令的存在也暗示(尽管并非证明(可能不支持直接触发。如果触发是一个硬性要求,rsyslogd可以提供帮助。


BTW,人们只能钦佩systemd粉丝的热情,即使他们声称的答案显然完全无关,他们也能传播爱。

显然,目标系统不使用systemd。问题是关于chronyd而不是关于systemd-timesyncd,而systemd-time-wait-sync.service仅适用于后者。

建议在此处调查systemd-time-wait-sync.service

建议的技术是使用等待systemd-time-wait-sync.servicesystemd服务单元来同步内核时钟。

在服务单元文件或管道中使用after命令。这里和这里描述了这些技术。

相关内容

  • 没有找到相关文章

最新更新