如何在一段时间后重新启动服务?

如何在一段时间后重新启动服务?

我们有多个系统存在固件错误。供应商已意识到此问题并将修复固件错误。在此之前,我们必须采用一种解决方法:在启动后一段时间重新启动相关服务。

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为强制单次触发不保持活动状态。

相关内容