systemd:需要 NTP 同步

Mar*_*oll 5 systemd ntp

我应该在我的单元文件中放入什么以确保我的服务在通过 ntp 设置时间后启动?

我有一个带有小型 python 脚本的树莓派,可以将数据记录到 SQL 数据库中。由于 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
Run Code Online (Sandbox Code Playgroud)

我应该如何修改我的单元文件?

我的系统版本是:

#> systemctl --version
systemd 232
Run Code Online (Sandbox Code Playgroud)

Jef*_*ler 3

由于raspbian似乎使用 timesyncd ,我会调整您的单元文件以取决于该目标:

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

[Service]
Type=simple
...
Run Code Online (Sandbox Code Playgroud)

如果您已禁用 timesyncd 以支持 ntp,则替换 NTP 服务名称。

似乎较新的(239+)systemd 版本支持时间同步服务,这听起来更有用,因为它会等到时钟同步,而不是只在同步过程开始时。

如果短启动时间并不重要,并且您发现您的服务在时间同步之前仍在启动,您可能会发现使用以下命令在服务启动中添加短暂的延迟就足够了ExecStartPre

...
ExecStartPre=sleep 30
...
Run Code Online (Sandbox Code Playgroud)

根据实验以及 Raspberry Pi 同步时间所需的可靠时间来调整睡眠时间。