如何使用linux软件看门狗

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

我googling这一点,发现Linux有看门狗在/ dev /看门狗,但不知道如何使用它。有人可以帮助我的例子。

我的问题是我在哪里指定我的应用程序名称和延迟间隔重新启动。 由于我是linux新手,如果可能的话,请简单介绍一下示例。 谢谢

大多数的Unix / Linux init程序会为你管理守护进程并重启它们。 看看把你的服务放在/etc/inittab 。 或者你可能正在使用Upstartsystemd

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

从你的Busybox标签,我会假设你正在运行一个嵌入式系统。 在那些系统V风格的初始化脚本和他们所有的shell脚本真的是矫枉过正。 你应该把所有的东西全部翻出来,用/etc/inittab或者upstart或systemd作业中的条目替换它。

由于主持人无视现在的改善,所以我不得不单独发帖

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

那么这是不正确的,在看门狗发出系统挂起信号之后,很有可能重启单个或多个进程 – 甚至可以中止重启或者进行SOFT重启,一个可以配置“测试”和“修复“脚本/二进制文件,可以做任何你想做的事情。 看门狗的busybox版本被剥离到几乎无法使用的水平…我想世界永远不会知道为什么busybox-devs决定放弃主要功能 – 现在,最好避免busybox – 速度改进几乎不存在,减小尺寸并不能弥补功能的巨大损失。 / bin / bash是相当小的 – 如果大小很重要,你可以用“-Os”标记重新编译所有的东西,而且你还是很好用的 – 一个开箱即用的看门狗,它可以满足你想要的任何东西。

哦,请不要创建自己的看门狗 – 这很可能会给你留下未经处理的错误,有一天会让你的生活变得糟糕。

如何使用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,则有两个看门狗:一个用于硬件(使用systemd.conf或使用看门狗守护进程),另一个用于守护进程初始化为服务。 如果systemd是你的选择请看下面的内容:http: //0pointer.de/blog/projects/watchdog.html

如果有人到达这个页面寻找操作系统看门狗(这不是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允许监视进程的停止/终止以及以热模式或冷模式启动实用程序的能力。 热模式允许实用程序使用高速缓存的记录来监视已启动的进程,而冷模式开始时会丢弃这样的高速缓存的值,从而尝试启动所有进程。

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