systemd:NTP同期が必要です。

systemd:NTP同期が必要です。

ntpで時間を設定した後にサービスを開始するには、ユニットファイルに何を入れる必要がありますか?

SQLデータベースにデータを書き込む小さなPythonスクリプトを含むRaspberry Piがあります。 rpiにはRTCバッテリーがないため、起動時やインターネットに接続していないと時間とデータが間違っています。データベースで誤ったタイムスタンプを回避するには、正しい時刻を取得してスクリプトを実行する必要があります。

これまで私のユニットファイル:

[Unit]
Description=desc
Requires=mysql.service
After=syslog.target mysql.service

[Service]
Type=simple
ExecStart= /usr/bin/python3 /etc/script/script.py
SyslogIdentifier=test
StandardOutput=null
StandardError=syslog
Restart=always
RestartSec=5
User=pi

[Install]
WantedBy=multi-user.target

ユニットファイルをどのように変更する必要がありますか?

私のシステムバージョンは次のとおりです。

#> systemctl --version
systemd 232

答え1

そうだからRaspbianはtimesyncdを使用します、そのターゲットに基づいてユニットファイルを調整します。

[Unit]
Description=desc
Requires=mysql.service
After=syslog.target mysql.service  systemd-timesyncd.service
#                                  ^^^    the addition   ^^^

[Service]
Type=simple
...

ntpをサポートするためにtimesyncdを無効にした場合は、NTPサービスの名前を変更してください。

それ最新の(239+)システムバージョンが時間同期サービスをサポートしているようです。これは、同期プロセスを開始するのではなく、クロックが同期されるのを待つため、より便利です。

短い開始時間が重要ではなく、時間が同期するまでサービスが開始され続ける場合は、次のコマンドを使用してサービスの開始に短い遅延を追加するだけで十分ですExecStartPre

...
ExecStartPre=sleep 30
...

実験に応じて、スリープ時間とRaspberry Piの時間を確実に同期させるのにかかる時間を調整します。

関連情報