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の時間を確実に同期させるのにかかる時間を調整します。