如何配置 systemd 服务以定期重启?

新手上路,请多包涵

我有一个简单的 systemd 服务,需要定期重新启动以防止其进程出错。 systemd 服务是否有配置选项来定期重新启动它们?所有 Restart* 选项 似乎都与退出时重新启动服务有关。

原文由 wes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

是的,您可以通过使您的服务 Type=notify 来使您的服务定期重新启动。在服务文件的 [Service] 部分中添加此选项以及 Restart=always 并给出 WatchdogSec=xx ,其中 xx 是您要重新启动服务的时间段(以秒为单位)。在这里,您的进程将在 xx 时间段后被 systemd 杀死,并将再次被 systemd 重新启动。例如。

 [Unit]
.
.

[Service]
Type=notify
.
.
WatchdogSec=10
Restart=always
.
.

[Install]
WantedBy= ....

原文由 Saturn 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 systemd 版本 >= 229,有一个名为 RuntimeMaxSec 的选项,它会在服务运行一段时间后终止服务。

例如,每 7 天重新启动一次:

 [Service]
Restart=always
RuntimeMaxSec=7d

对我来说,这似乎比滥用 Type=notifyWatchdogSec 更优雅。

systemd 提供了一种干净的方式来添加和覆盖供应商提供的 systemd 单元文件中的指令。插入单元在 man systemd.unit 中描述。例如,如果您想定期重新启动包提供的 foo 服务,您将创建一个名为 /etc/systemd/system/foo.service.d/periodic-restart.conf 的文件。内容如上图所示。然后:

  systemctl daemon-reload
 systemctl restart foo

您可以确认已加载 Drop-In 单元,因为它将在状态输出中报告:

  systemctl status

最后,您可以通过搜索 systemctl show 输出来确认已包含该指令:

  systemctl show foo.service | grep RuntimeMax

systemctl show 报告的指令将是“RuntimeMaxUSec`

原文由 Alex Forbes 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题