我们有多个系统存在固件错误。供应商已意识到此问题并将修复固件错误。在此之前,我们必须采用一种解决方法:在启动后一段时间重新启动相关服务。
systemd 中有控制失败服务重启的机制,但在这里它们没有帮助,因为服务已成功启动。仅仅将服务启动延迟(比如说) 1 分钟是没有用的,它需要启动两次。
那么系统启动后自动重启服务的最佳方法是什么?
答案1
在这种情况下我建议使用 cron:
@reboot sleep 300 && systemctl restart yourservice
这将在机器启动 5 分钟后重新启动你的服务
有关更多信息,请参阅 crontab(5) 手册页中的扩展部分https://linux.die.net/man/5/crontab
答案2
创造.timer 单元控制服务单元。
使用与服务相同的基本名称,因此如果服务被调用thing
,则/etc/systemd/system/foo.timer
[Unit]
Description=Start broken thing twice
[Timer]
OnBootSec=1min
OnBootSec=2min
[Install]
WantedBy=timers.target
然后启用这个新的计时器。systemctl enable thing.timer
由于即使存在此问题,服务仍保持活动状态,因此编辑覆盖使其不活动。如果 systemctl edit thing.service
不查看原始单元,很难说要更改哪个。也许添加一个ExecStartPost=
命令,只有当设备处于良好状态时才返回 0。或者更改RemainAfterExit=no
为强制单次触发不保持活动状态。