我应该在我的单元文件中放入什么内容,以确保我的服务在通过 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 同步时间所需的可靠时间来调整睡眠时间。