запускать скрипт, когда часы хронируют шаги
Мне нужно запустить определенную службу после того , как системные часы были правильно настроены кумом.
Системное время поддерживается хроникой (
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
Я, кажется, припоминаю, что клан может вызывать скрипт всякий раз, когда изменяется уровень стратуса, но мне не удалось найти ссылки.
В любом случае: есть ли способ проинструктировать crony запускать скрипт/программу или иным образом отправлять какой-либо сигнал всякий раз, когда получает/теряет отслеживание с действительным сервером?
В настоящее время я полагаюсь на довольно уродливый:
while chronyc tracking | grep -q "Not synchronised"; do sleep 1; done
но активная сигнализация
chronyd
было бы предпочтительнее.
Подробности:
- Система — это (относительно) небольшое IoT-устройство под управлением Linux (Yocto).
- У него нет RTC (он всегда запускается с часами, установленными на эпоху).
- Система не имеет подключения к Интернету (изначально).
- Система подключена к устройству с приемником GNSS, и оттуда выводится точное время.
- Может пройти (иногда «очень») много времени, прежде чем GNSS получит привязку и, таким образом, сможет распространять время.
- В какой-то момент хрони, наконец, получает правильное время и отсчитывает системные часы. После этого мне нужно запустить службу (или запустить скрипт или что-то еще).
- я сейчас голосую
chronyc tracking
и статус синтаксического анализа, но это не очень приятно.
2 ответа
Я хотел сделать то же самое и пришел с пустыми руками.
Я, однако, нашел
chronyc waitsync
, который, по-видимому, представляет собой встроенный способ проведения опроса без необходимости явного синтаксического анализа и перехода в спящий режим. Это работает достаточно хорошо для моего случая, так как мне нужно только отложить одно действие запуска.
Существование этой команды также намекает (хотя ни в коем случае не доказывает), что прямой запуск может не поддерживаться. Если запуск является жестким требованием,
rsyslogd
может помочь .
Кстати, можно только восхищаться энтузиазмом поклонников systemd, распространяющих любовь, даже когда их предполагаемый ответ явно и совершенно неуместен.
Очевидно, что целевая система НЕ использует
systemd
. Вопрос о
chronyd
, не оsystemd-timesyncd
, пока
systemd-time-wait-sync.service
относится только к последнему.