21

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

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

我在谷歌上搜索了一下,发现 Linux 有看门狗,/dev/watchdog但不知道如何使用它。有人可以帮我举个例子吗?

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

4

9 回答 9

18

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

好吧,这根本不是真的,很可能在看门狗发出系统挂起信号后重新启动单个或多个进程-您甚至可以中止重新启动或进行软重新启动,可以配置“测试”和“修复”-脚本/二进制文件,可以做任何你想让他们做的事情。看门狗的busybox版本被剥离到几乎无法使用的水平......我想世界永远不会知道为什么busybox开发者决定放弃主要功能 - 现在,最好完全避免busybox - > 速度改进几乎不存在,尺寸减小并不能弥补功能上的巨大损失。/bin/bash 相当小 - 如果大小很重要并且您使用标志“-Os”重新编译所有内容

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

于 2012-02-23T09:12:23.567 回答
16

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

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

根据您的 Busybox 标签,我假设您正在运行嵌入式系统。在这些方面,带有所有 shell 脚本的 System V 风格的初始化脚本真的是矫枉过正。您可能应该撕掉所有这些并将其替换为/etc/inittab新贵或 systemd 作业中的条目。

于 2012-01-31T02:01:56.750 回答
10

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

这将在每个小时的每一分钟每一分钟运行您的测试……您明白了。

于 2012-01-31T00:40:49.580 回答
4

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

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

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

于 2012-01-31T01:59:52.767 回答
2

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

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

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

于 2012-01-31T01:46:03.210 回答
2

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

于 2016-02-24T16:28:01.357 回答
1

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

于 2018-05-08T12:19:17.153 回答
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)

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

于 2017-07-26T05:02:37.990 回答
-3

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

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

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

该实用程序还具有启动自身实例以监控自身的能力,从而为看门狗提供看门狗。

于 2017-10-18T13:19:25.623 回答