40

我正在寻找一种方法来监视某些 Windows 服务(在 Windows Server 2003 上)并在必要时重新启动。这些服务位于不同的服务器上,主要包括 SQL Server 服务(例如 SQL Server Agent),但也包括一些专有服务。

如果服务停止,则发送电子邮件警报也非常有用。

4

6 回答 6

45

Windows 中内置了一个“可能足够”的版本。查看服务属性的“恢复”选项卡,可通过services.msc.

您可以通过以下方式处理服务失败:

  • “重启服务”
  • “运行程序”
  • “重启电脑”

例如,“运行程序”可以是一个发送邮件的小脚本。

如果您想要一个带有概览仪表板等的更大解决方案,有很多可用的系统监控解决方案。例如,想到了 SolarWinds IPMonitor、Nagios 或 Cacti。

于 2008-11-17T11:31:13.297 回答
15

如果您对某些.NET编程感兴趣,System.ServiceProcess命名空间提供了允许您实现、安装和控制 Windows 服务应用程序的类。

简单示例,在 C# 中检查并启动服务:

var srv = new ServiceController("MyService");
Console.WriteLine("MyService Status {0}", srv.Status);
if (srv.Status != ServiceControllerStatus.Running)
    srv.Start();
于 2008-11-17T11:55:41.390 回答
6

它们可能是一些专用工具,但我只想指出wmic工具。

wmic /node:[hostname] service list

能够列出任何计算机的服务

WMIC SERVICE where caption='TELNET' CALL STARTSERVICE

将重新启动 telnet 服务。

如果你把 wmic 封装成脚本语言(能够发送邮件),你就可以拥有你正在寻找的监控工具。

于 2008-11-17T11:30:36.463 回答
5

这取决于您要监控的具体内容:

  • 就服务控制管理器 (SCM) 而言,服务实际上已停止。
  • 服务在 SCM 不知情的情况下崩溃 - 由于线程,这很常见。
  • 一项服务在 SCM 不知情的情况下挂起 - 这也很常见。

对于第一项,您可以将服务配置为启动发送电子邮件警报的脚本。请注意,如果服务由于其无法控制的情况(依赖于不稳定的网络连接或其他)而不断重新启动,这可能真的很烦人。

对于其他两项,您将需要某种类型的心跳服务,您可以构建或购买。小心让心跳监控器在其监控的服务本地运行,因为正如我前段时间所写,网络不可靠

于 2008-11-17T13:14:12.463 回答
3

您可以使用 ManageEngine Free Windows Service Monitor。使用它,您可以启动/停止远程系统中的服务。

http://www.manageengine.com/free-windows-service-monitor/free-windows-service-monitor-index.html

于 2011-12-22T09:53:01.080 回答
1

+1 用于确保在本地计算机上监控服务。

Service Hawk之类的东西可以监控您的服务并在它们停止时重新启动它们并向您发送电子邮件警报。您还可以考虑安排定期重启,因为正如另一张海报所提到的,就 SCM 而言,该服务并不总是显示为“已停止”。在这些情况下,服务会被挂起、冻结或以其他方式出现问题,并按计划每隔一段时间重新启动服务,以保持其干净运行。它只是清除内存等,并给它一个新的开始。

于 2009-10-23T21:25:58.103 回答