Обновить время с помощью chrony из скрипта systemd (перезапуск какого-то приложения)?

Обновить время с помощью chrony из скрипта systemd (перезапуск какого-то приложения)?

Если мой хостер переносит мою виртуальную машину на другой хост, локальное время сбивается (до 3 секунд). Chrony может это исправить, но требуется много времени, чтобы это понять. В это время мой узел базы данных (CockroachDB) отключается из-за разницы во времени (максимум 0,5 сек.). Затем мой скрипт systemd перезапускает его.

Теперь я хочу, чтобы скрипт systemd сначала точно обновил время. Поэтому я добавил это в свой /etc/systemd/system/cockroach.serviceсценарий:

ExecStartPre=-/usr/bin/chronyc -a makestep

Но это приводит к ошибке 501 (отсутствует авторизация), поскольку мой скрипт systemd запускается от имени пользователя «cockroach», а демон chrony принимает сообщения только от пользователей root или chrony (UDP).

Теперь я застрял. Есть ли способ разрешить chrony получать сообщения от пользователя cockroach тоже? Или есть другие варианты, чтобы заставить его синхронизировать время сейчас (chrony запущен, поэтому ручное обновление невозможно).

решение1

Решением является синтаксис "+" дляExecStartPreпараметр. Следующий код выполняетхроническийисполняемый файл с правами root (+) и игнорирующий любые ошибки, которые могут возникнуть при этом вызове (-):

ExecStartPre=-+/usr/bin/chronyc -a makestep

Мне это подошло.

Документацию по этим префиксам можно найти в документации systemd дляExecStartпараметр здесь:https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=

Связанный контент