如果我的主機服務商將我的虛擬機器移至另一台主機,則本機時間會漂移(最多 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=