使用 systemd 脚本中的 chrony 更新时间(某些应用程序重新启动)?

使用 systemd 脚本中的 chrony 更新时间(某些应用程序重新启动)?

如果我的托管服务商将我的虚拟机移至另一台主机,则本地时间会漂移(最多 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

解决方案是使用“+”语法执行开始前范围。下面执行的是慢性具有 root 权限 (+) 的可执行文件,并忽略此调用可能发生的任何错误 (-):

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

这对我来说效果很好。

您可以在 systemd 文档中找到这些前缀的文档执行启动这里的参数:https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=

相关内容