systemd スクリプトから chrony を使用して時間を更新しますか (一部のアプリを再起動)?

systemd スクリプトから chrony を使用して時間を更新しますか (一部のアプリを再起動)?

ホスト側が VM を別のホストに移動すると、ローカル時間がずれてしまいます (最大 3 秒)。Chrony はこれを修正できますが、認識するまでにかなりの時間がかかります。この間、時間差 (最大 0.5 秒まで許容) のため、データベース ノード (CockroachDB) がシャットダウンします。その後、systemd スクリプトがそれを再起動します。

今、私はsystemdスクリプトが最初に確実に時間を更新するようにしたいので、これを私の コックローチ脚本:

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

しかし、私の systemd スクリプトはユーザー「cockroach」として実行され、chrony デーモンはユーザー root または chrony (UDP) からのメッセージのみを受け入れるため、エラー 501 (認証がありません) が発生します。

今、行き詰まっています。chrony が cockroach ユーザーからのメッセージも受信できるようにする方法はありますか? または、今すぐ時間を同期するための他のオプションはありますか (chrony は実行中なので、手動更新はできません)。

答え1

解決策は「+」構文です実行開始前パラメータ。以下はクロニクルート権限で実行可能 (+) であり、この呼び出しで発生する可能性のあるエラーは無視されます (-):

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

これは私にとってはうまくいきました。

これらのプレフィックスに関するドキュメントは、systemdのドキュメントに記載されています。実行開始パラメータはこちら:https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=

関連情報