谁能告诉我如何处理 Linux 中的软件看门狗?
我有一个SampleApplication
连续运行的程序,如果它意外挂起或关闭,我需要重新启动它。
我在谷歌上搜索了一下,发现 Linux 有看门狗,/dev/watchdog
但不知道如何使用它。有人可以帮我举个例子吗?
我的问题是在哪里指定我的应用程序名称和重新启动的延迟间隔?
谁能告诉我如何处理 Linux 中的软件看门狗?
我有一个SampleApplication
连续运行的程序,如果它意外挂起或关闭,我需要重新启动它。
我在谷歌上搜索了一下,发现 Linux 有看门狗,/dev/watchdog
但不知道如何使用它。有人可以帮我举个例子吗?
我的问题是在哪里指定我的应用程序名称和重新启动的延迟间隔?
linux 软件看门狗会重启机器,而不仅仅是重启你的进程。
好吧,这根本不是真的,很可能在看门狗发出系统挂起信号后重新启动单个或多个进程-您甚至可以中止重新启动或进行软重新启动,可以配置“测试”和“修复”-脚本/二进制文件,可以做任何你想让他们做的事情。看门狗的busybox版本被剥离到几乎无法使用的水平......我想世界永远不会知道为什么busybox开发者决定放弃主要功能 - 现在,最好完全避免busybox - > 速度改进几乎不存在,尺寸减小并不能弥补功能上的巨大损失。/bin/bash 相当小 - 如果大小很重要并且您使用标志“-Os”重新编译所有内容
哦,请不要创建你自己的看门狗——这很可能会给你留下未处理的错误,让你的生活有一天变得糟糕。
大多数 Unix/Linuxinit
程序将为您管理守护程序并重新启动它们。考虑将您的服务放在/etc/inittab
. 或者您可能正在使用Upstart
or systemd
。
所有这些程序都运行,PID 1
并且它们的工作是监视和重新启动系统进程。
根据您的 Busybox 标签,我假设您正在运行嵌入式系统。在这些方面,带有所有 shell 脚本的 System V 风格的初始化脚本真的是矫枉过正。您可能应该撕掉所有这些并将其替换为/etc/inittab
新贵或 systemd 作业中的条目。
使用 cron 怎么样?设置一个每分钟运行的小型 cron 作业。检查您的应用程序是否启动(使用 ps),如果没有,请重新启动它。
制作一个像这样的小脚本:
#!/bin/bash
if [ ! "$(pidof myapp)" ]
then
/path/to/myapp &
fi
您测试“myapp”是否在进程列表中。“!” 反转测试。如果它不存在,它将运行“myapp”。“&”就是这样它在后台开始。
将此添加到 cron。根据您的系统和偏好,有几种方法可以做到这一点。经典的一种是使用 crontab。有很多关于如何指定 crontab 行的文档,但你可能想要这样的东西:
* * * * * /path/to/the/script.sh > /dev/null
这将在每个小时的每一分钟每一分钟运行您的测试……您明白了。
使用/etc/inittab
您可以利用它在特定的运行级别启动,如果它被杀死,它将自动重新启动
n:2345:respawn:/path/to/app
这将使它在运行级别 2345 中重新生成,您可能只需要 3 和 5 但这将正常工作并且内置在 Linux 中。
看门狗的文档在这里: http: //linux.die.net/man/8/watchdog
但听起来这不是你想要的。linux 软件看门狗会重启机器,而不仅仅是重启你的进程。
您可以轻松制作自己的看门狗。例如,您可以让您的程序定期编写一些临时文件,并启动一个脚本,该脚本不时检查该文件并在一段时间未更新时重新启动您的进程。
如果您使用 systemd,则有 2 个看门狗:一个用于硬件(使用 systemd.conf 或使用看门狗守护程序),另一个用于初始化为服务的守护程序。如果 systemd 是您的选择,请查看以下内容:http: //0pointer.de/blog/projects/watchdog.html
您可以使用“Monit”实用程序重新启动和监控您的服务。只需发出命令“apt-get install monit”即可安装。
如果有人来到此页面寻找操作系统看门狗(这不是 OP 想要的直接),这就是您需要的:
sudo apt-get install watchdog
service watchdog status
service watchdog start
要检查它是否正常工作,请执行:
tail -f /var/log/syslog | grep watchdog
您应该会看到如下内容:
Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s)
我希望我能正确回答这个问题。所有其他答案似乎都非常不同。
您可以尝试 wdog,它是一个用 c++ 编写的实用程序,并链接到 Kahless_9 框架。可以从以下网址下载源代码:https ://github.com/zepher999/wdog并根据您自己的需要进行更新。未来仍然需要一些 TODO 列表更改,但这应该满足您当前的要求。
该实用程序需要一个 csv 文件作为输入,其中包含要使用其参数监视的所有进程。启动时,该实用程序将启动 csv 文件中指定的所有这些进程,并监视它们是否退出/终止,然后重新启动该进程。
目前 wdog 允许停止/杀死受监控的进程以及在热或冷模式下启动实用程序的能力。热模式允许实用程序使用缓存记录来监视已启动的进程,而冷模式启动会丢弃此类缓存值,从而尝试启动所有进程。
该实用程序还具有启动自身实例以监控自身的能力,从而为看门狗提供看门狗。