systemd:需要 NTP 同步

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

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

我的系统版本是:

#> 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
...

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

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

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

...
ExecStartPre=sleep 30
...

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

相关内容