错误报告状态的 Windows 服务的恢复选项

错误报告状态的 Windows 服务的恢复选项

我支持一个应用程序,它使用两个 Windows 服务来执行两个截然不同的任务。一个控制应用程序的预定执行,另一个持续运行,监听在特定端口上传输的 HL7 消息。它们都容易失败。我们已经确定,与数据库服务器、网络共享等的连接失败可能是失败的罪魁祸首,并且服务大多数情况下都会重新启动而不会出现问题。问题是有时服务停止工作,但在 Windows 服务管理器中继续显示“正在运行”状态。如果您使用该服务的命令行查询。只有当您主动尝试停止并重新启动服务时,您才会意识到服务已停止,因为尝试从服务管理器控制台停止它超时并返回通用的“服务未及时响应。”消息。然后您必须终止它正在运行的进程线程才能停止它。

我想知道两件事:第一:有没有一种监控服务的方法,能够返回除报告的服务状态之外的更多信息?对第三方选项持开放态度。

二:是否可以使用默认的 Windows 服务恢复选项来按计划重新启动服务,当服务处于错误报告状态时,尝试停止服务时会显示超时和错误消息?

抱歉啰嗦了点。我试图在提供尽可能多的有用信息和浪费我花在这件事上的宝贵时间之间找到平衡。

答案1

我建议在服务属性中设置“自动重启服务”,或者以防所需服务向事件查看器返回事件。您可以创建一个计划任务,该任务将由特定事件 ID 触发,然后重启服务。

答案2

因此,服务仍报告为正在运行,但未提供应有的正常功能....尝试使用性能监视器查看process此服务停止正常运行时,其计数器之一是否失控。如果您可以找到性能数据来表明服务不健康:

  • 许多第三方工具可以配置为根据性能计数器触发器重新启动服务。
  • 您可以在 perfmon 中设置一个data collector类型,performance counter alert在达到该阈值时循环服务。此选项在响应方面相当敏感。例如,如果您想等待阈值超过至少 1 分钟后再重新启动服务,这不是一个好选择。如果这不是问题,请参阅如何监视基于 Windows 的 JVM 的内存使用情况并在内存过高时触发警报?
  • 您还可以使用 Powershell 通过计划任务监控性能计数器,并Get-Counter -maxSamples 999 -sampleInterval 999 -counter XXX解决前者的触发特性。

答案3

Nagios Core 是一款免费工具,可用于监控 Windows 服务,并可自动重启失败的服务。他们还有一款付费产品(Nagios XI),非常适合大型环境。

您可以在这里找到推介和下载链接:https://www.nagios.com/solutions/windows-service-monitoring/

这里有一个使用事件处理程序启动进程的示例: https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/eventhandlers.html

相关内容