如何使用Linux软件看门狗?

如何使用Linux软件看门狗?,linux,linux-kernel,busybox,watchdog,Linux,Linux Kernel,Busybox,Watchdog,谁能告诉我如何在Linux中处理软件看门狗 我有一个持续运行的程序SampleApplication,如果它意外挂起或关闭,我需要重新启动它 我在谷歌上搜索了一下,发现Linux的watchdog位于/dev/watchdog,但不知道如何使用它。有人能帮我举个例子吗 我的问题是在哪里指定我的应用程序名称和重新启动的延迟间隔?使用cron怎么样?设置一个每分钟运行的小cron作业。检查应用程序是否已启动(使用ps),如果未启动,请重新启动 制作一个这样的小脚本: #!/bin/bash if [

谁能告诉我如何在Linux中处理软件看门狗

我有一个持续运行的程序
SampleApplication
,如果它意外挂起或关闭,我需要重新启动它

我在谷歌上搜索了一下,发现Linux的watchdog位于
/dev/watchdog
,但不知道如何使用它。有人能帮我举个例子吗


我的问题是在哪里指定我的应用程序名称和重新启动的延迟间隔?

使用cron怎么样?设置一个每分钟运行的小cron作业。检查应用程序是否已启动(使用ps),如果未启动,请重新启动

制作一个这样的小脚本:

#!/bin/bash
if [ ! "$(pidof myapp)" ] 
then
  /path/to/myapp &
fi
* * * * * /path/to/the/script.sh > /dev/null
您可以测试“myapp”是否在进程列表中。“!”会反转测试。如果不存在,则运行“myapp”。“&”就是从背景开始的

将此添加到cron。根据您的系统和偏好,有几种方法可以做到这一点。经典的方法是使用crontab。有很多关于如何指定crontab行的文档,但您可能需要这样的内容:

#!/bin/bash
if [ ! "$(pidof myapp)" ] 
then
  /path/to/myapp &
fi
* * * * * /path/to/the/script.sh > /dev/null

这将使您的测试每分钟、每小时、每小时……都运行一次。

看门狗的文档如下:

但听起来这不是你想要的。linux软件看门狗将重新启动机器,而不仅仅是重新启动进程


你可以很容易地做你自己的看门狗。例如,您可以让您的程序定期编写一些临时文件,并启动一个脚本,每隔一段时间检查一次该文件,如果该文件有一段时间没有更新,则重新启动进程

使用
/etc/inittab
您可以利用它在特定的运行级别启动,如果它被终止,它将自动重新启动

n:2345:respawn:/path/to/app

这将使它在运行级别2345中重新启动您可能只需要3和5,但这将很好地工作,并且内置于Linux中。

大多数Unix/Linux
init
程序将为您管理守护程序并重新启动它们。查看将您的服务放置在
/etc/inittab
中。或者您可能正在使用
Upstart
systemd

所有这些程序都以PID 1的形式运行,它们的工作是监视和重新启动系统进程


根据您的Busybox标签,我假设您正在运行嵌入式系统。在这些脚本上,SystemV风格的init脚本及其所有shell脚本真是太过分了。你可能应该把所有这些都撕下来,用
/etc/inittab
或upstart或systemd jobs中的条目替换掉。

既然版主忽略了帖子的改进,我现在就不得不单独发布了

linux软件看门狗将重新启动机器,而不仅仅是重新启动进程

这根本不是真的,在看门狗发出系统挂起的信号后,很有可能重新启动单个或多个进程-您甚至可以中止重新启动或进行软重新启动,您可以配置“测试”和“修复”-脚本/二进制文件,它们可以执行您希望它们执行的任何操作。busybox版本的watchdog被剥离到几乎无法使用的级别。。。我想全世界永远都不会知道为什么busybox开发人员决定放弃主要功能——目前,最好是完全避免使用busybox-->速度的提高几乎不存在,尺寸的减小并不能弥补功能的巨大损失/bin/bash相当小——如果大小重要,并且你很乐意去的话,就用“-Os”标志重新编译所有东西——一个开箱即用的看门狗,它允许你想要的任何东西


哦,请不要创建自己的看门狗-这很可能会给您留下未处理的错误,并使您的生活变得糟糕。

如果您使用systemd,则有两个看门狗:一个用于硬件(使用systemd.conf或使用看门狗守护进程),另一个用于初始化为服务的守护进程。 如果您选择systemd,请查看以下内容:

如果有人来到此页面寻找操作系统看门狗(这不是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)

我希望我回答的问题是正确的。所有其他的答案看起来都是非常不同的。

< p>你可以试试WBO,它是一个C++编写的实用程序,链接到Kauls9框架。这方面的源代码可以从下载:并根据您自己的需要进行更新。未来仍需对待办事项列表进行一些更改,但这应符合您当前的要求

该实用程序需要一个csv文件作为输入,其中包含要监视的所有进程及其参数。启动时,该实用程序启动csv文件中指定的所有这些进程,并监视它们的退出/终止,然后重新启动该进程

目前,wdog允许停止/终止受监控的进程,以及在热模式或冷模式下启动实用程序。热模式允许应用工具使用缓存记录来监视已启动的进程,而冷模式启动会丢弃此类缓存值,从而尝试启动所有进程

该实用程序还能够启动自身的实例来监视自身,从而为监视程序提供一个监视程序。

您可以使用“Monit”实用程序重新启动和监视您的服务。
只需发出命令“apt get install monit”即可安装。

据我所知,这只会确保整个系统不会挂起,如果挂起就会重置。我不认为你可以仅仅为了让一个userland应用程序保持活力而使用它。我有一个嵌入式Linux应用程序中的工具的经验,它可以满足你的要求,不幸的是,我记不起它的名字,否则我会发布一个答案,但我确实知道它在任何情况下都或多或少像你所建议的那样工作,所以这不是一个坏主意。另一种选择是使用localhost地址27.0.0.1上的特定端口,并让进程发送到它和您的软件