有人能告诉我如何在Linux中处理软件看门狗吗?
我有一个名为SampleApplication
的程序,它需要持续运行,如果它挂起或意外关闭,我需要重新启动它。
我在谷歌上搜索发现Linux有一个位于/dev/watchdog
的看门狗,但不知道该如何使用。能否给我提供一个例子帮助我理解吗?
我的问题是,我在哪里指定我的应用程序名称和延迟间隔以进行重新启动?
有人能告诉我如何在Linux中处理软件看门狗吗?
我有一个名为SampleApplication
的程序,它需要持续运行,如果它挂起或意外关闭,我需要重新启动它。
我在谷歌上搜索发现Linux有一个位于/dev/watchdog
的看门狗,但不知道该如何使用。能否给我提供一个例子帮助我理解吗?
我的问题是,我在哪里指定我的应用程序名称和延迟间隔以进行重新启动?
init
程序将为您管理守护进程并重新启动它们。请考虑将您的服务放置在/etc/inittab
中。或者您可能正在使用Upstart
或systemd
。PID 1
运行,它们的工作是监视和重新启动系统进程。/etc/inittab
或upstart或systemd任务替换它们。/
目录中使用initrd
。或者可能你有一个只读的/
和一个可读写的层叠在上面。 - Zan Lynx考虑使用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
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允许停止/杀死受监视的进程,以及以热或冷模式启动实用程序的能力。热模式允许实用程序使用缓存记录来监视已经启动的进程,而冷模式启动则丢弃这些缓存值,因此尝试启动所有进程。
该实用程序还具有启动自身实例以监视自身的能力,从而拥有一个看门狗来监视看门狗。