如何使用linux软件看门狗

时间:2012-01-31 00:34:46

标签: linux linux-kernel busybox watchdog

大家可以告诉我如何处理linux中的软件看门狗。我有一个程序“SampleApplication”,它连续运行,如果它意外挂起或关闭,我需要重新启动它。

我正在谷歌搜索这个并发现linux在/ dev / watchdog有看门狗但不知道如何使用它。有人可以帮我举例。

我的问题是在哪里指定我的应用程序名称和延迟间隔以重新启动。由于我是linux的新手,请尽可能向我介绍样品。感谢

9 个答案:

答案 0 :(得分:15)

由于主持人现在忽略了后期改进,我将不得不单独发布

  

linux软件看门狗将重启机器,而不仅仅是重启你的过程。

嗯,这根本不是真的,在看门狗发出系统挂起的信号后,很有可能重启单个或多个进程 - 你甚至可以重启ABORT或进行SOFT-reboot,你可以配置“test” “和”修复“ - 脚本/二进制文件,它们可以执行任何您希望它们执行的操作。看门狗的busybox版本被剥离到接近无法使用的水平...我想全世界永远不会知道为什么busybox-devs决定放弃主要功能 - 现在,最好避免使用busybox - >速度改进几乎不存在,尺寸减小并不能弥补功能的巨大损失。 / bin / bash相当小 - 如果大小重要并且你很高兴,可以使用标志“-Os”重新编译所有内容 - 一个开箱即用的监视器,它可以提供你想要的所有内容。

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

答案 1 :(得分:14)

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

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

从Busybox标签我会假设您正在运行嵌入式系统。在那些,具有所有shell脚本的System V样式初始化脚本实在是太过分了。您应该将所有内容全部删除,并将其替换为/etc/inittab或upstart或systemd作业中的条目。

答案 2 :(得分:8)

如何使用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

这会在每一小时的每一分钟进行测试......你明白了。

答案 3 :(得分:4)

使用/etc/inittab你可以利用它来启动特定的运行级别,如果它被杀死,它将自动重启

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

这将使它在运行级别2345重新生成,你可能只需要3和5但这样可以正常工作并内置到Linux中。

答案 4 :(得分:2)

看门狗的文档在这里:http://linux.die.net/man/8/watchdog

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

您可以轻松制作自己的看门狗。例如,您可以让程序定期编写一些临时文件,并启动一个脚本,偶尔检查一次该文件,如果一段时间没有更新,则重新启动您的进程。

答案 5 :(得分:1)

如果您使用的是systemd,则有2个监视程序:一个用于硬件(使用systemd.conf或使用监视程序守护程序),另一个用于初始化为服务的守护程序。 如果systemd是您的选择,请查看以下内容: http://0pointer.de/blog/projects/watchdog.html

答案 6 :(得分:0)

如果有人到达此页面寻找操作系统监视程序(这不是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)

我希望我正确回答这个问题。所有其他答案似乎都非常不同。

答案 7 :(得分:0)

你可以使用" Monit"实用程序重新启动并监视您的服务。 只需通过发出命令`" apt-get install monit"。

进行安装

答案 8 :(得分:-1)

您可以尝试wdog,这是一个用c ++编写的实用程序,并链接到Kahless_9框架。可以从https://github.com/zepher999/wdog下载此源代码,然后更新以满足您自己的需求。未来还需要进行一些TODO列表更改,但这应该符合您当前的要求。

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

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

该实用程序还能够启动自身实例来监控自身,从而为监督者提供监视器。