[Unit]
Description=My Unit
[Service]
ExecStart=/my/app args
WatchdogSec=30 # 30s, but you can specify whatever you want
# Optional: Restart=on-watchdog # Restart app on watchdog failure
# Optional: WatchdogSignal=SIGABRT # Change signal sent to kill app
#
3条答案
按热度按时间9fkzdhlc1#
这不工作的原因在这篇文章中提到的相同:Execute multiple commands with && in systemd service ExecStart on RedHat 7.9
systemd服务内部的命令不会在正确的shell环境中执行。即使如此,我也没有某种源代码明确说明这一点。根据经验,单个systemd exec的功能如下:运行一个带参数的命令(不是多个命令,没有输出重定向等)。
就像在引用的帖子中一样,解决方案可以如下所示:
rhfm7lfc2#
你可以通过回声与你的看门狗互动,但我强烈建议你不要这样做。
echo会在每次运行时打开/关闭你的看门狗,需要将它配置为不可停止的看门狗。而且,对于每次打开/关闭,你会在kmsg日志中得到一个警告,接收到不必要数量的疯狂垃圾邮件。
做得对;通过编写你自己的应用程序和处理它的文件描述符来实现。2不要再使用回显了!3参见下面的例子:
另一个(也是更简单的)选择是设置一个现成的看门狗服务,参见Debian/Ubuntu的
watchdog
包。6mzjoqzu3#
我知道这稍微偏离了OP的问题,但是您也可以使用systemd的套接字API将监视器管理委托给systemd。
然后,您必须定期从您的应用重置看门狗:
如果服务失败,还有一些选项可以要求
systemd
重新启动机器,尽管我不记得是哪一个。如果您需要更多信息,您可以在此处查看综合指南:https://0pointer.de/blog/projects/watchdog.html