3

我对另一个关于 Windows 服务看门狗计时器的问题的答案非常感兴趣(请参阅此处)。那个回答说:

我还使用了在另一个线程中运行的内部看门狗系统。该线程查看主线程的活动,如日志输出或切换事件。如果未看到该活动,则认为该服务已挂起,我将关闭该服务。

在这种情况下,您可以将 Windows 配置为自动重新启动已停止的服务,这可能会清除问题(只要它不是内部逻辑错误)。

我使用的服务也有写入日志的文本日志。除了即将“睡一会儿”的服务外,我还会记录下一次醒来的时间。我使用 MTAIL 来查看日志以获取输出。”

任何人都可以提供一些示例代码如何使用在另一个线程中运行的内部看门狗,因为我目前有一个任务来开发一个 Windows 服务,如果它失败、挂断等,它将能够自动重启。

我真的很感谢你的帮助。

4

3 回答 3

5

我不喜欢在您正在观看的过程中将看门狗作为线程运行。这意味着如果整个过程由于某种原因挂起,看门狗将无法工作。

看门狗是从硬件世界提出的一个想法,他们做对了。使用尽可能简单的外部电路(这样可以证明它是正确的)。典型的看门狗只是简单地运行一个计时器,如果在计时器到期之前进程没有做任何事情(比如访问看门狗正在监视的内存位置),整个事情就会被重置。当看门狗被“踢”时,它会重新启动计时器。

进程踢看门狗的行为保护了该进程免于终止。

我的建议是编写一个非常简单的独立程序,它只监视一个事件(例如文件更新时间被修改)。如果该事件未在要求的时间内发生,请终止正在监视的进程(并让 Windows 重新启动它)。

然后让您观看的程序定期重写该文件。

于 2009-09-23T04:00:10.387 回答
4

您可以从服务属性配置为在发生故障时自行重启

Services -> right-click your service -> Properties -> First failure : restart the service -> Second failure : restart the service -> Subsequent failure : restart 
于 2009-09-23T02:47:38.603 回答
4

除了定期修改文件的 lastwritetime 之外,您可能还需要考虑的其他方法是创建适当的性能计数器甚至是 WMI 对象。我们在构建基础架构的后期进行,“诀窍”是在被监控的服务中找到一个有意义的工作单元,并在每次完成一个单元时脉冲你的“心跳”。

与文件方法相比,WMI 或 Perf Counters 的优势在于,您可以看到一大堆专业的 MIS / 管理工具。这可以增加很多价值。

于 2009-09-23T04:35:39.690 回答