我正在寻找一种方法来监视某些Windows服务(在Windows Server 2003上)并在必要时重新启动.这些服务位于不同的服务器上,主要包括SQL Server服务(例如SQL Server代理),还包括一些专有服务.
如果服务已停止,则发送的电子邮件警报也非常有用.
Windows中内置了"可能足够"的版本.查看服务属性的"恢复"选项卡,可通过services.msc
.
您可以通过以下方式对服务失败:
"重启服务"
"跑一个Progam"
"重启电脑"
例如,"运行程序"可能是一个发送邮件的小脚本.
如果您想要一个带有概览仪表板的更大解决方案,那么可以使用大量的系统监控解决方案.例如,想到SolarWinds IPMonitor,或Nagios或Cacti.
如果您对某些.NET编程感兴趣,System.ServiceProcess命名空间提供了允许您实现,安装和控制Windows服务应用程序的类.
简单的例子,在C#中检查和启动服务:
var srv = new ServiceController("MyService"); Console.WriteLine("MyService Status {0}", srv.Status); if (srv.Status != ServiceControllerStatus.Running) srv.Start();
它们可能是一些专用工具,但我只想指出wmic工具.
wmic /node:[hostname] service list
能够列出任何计算机的服务
WMIC SERVICE where caption='TELNET' CALL STARTSERVICE
将重新启动telnet服务.
如果您使用脚本语言(能够发送电子邮件)封装wmic,则可以使用您正在查找的监视工具.
这完全取决于您要监视的内容:
就服务控制管理器(SCM)而言,服务实际上已停止。
服务已崩溃,而SCM却不知道-这是很常见的线程。
挂起了服务,而SCM却不知道-这也是很常见的。
对于第一项,您可以将服务配置为启动一个发送电子邮件警报的脚本。请注意,如果由于服务无法控制的情况(取决于不稳定的网络连接或其他原因)而导致服务继续重启,这可能会很烦人。
对于其他两个项目,您将需要某种类型的心跳服务,可以构建或购买。小心使心跳监视器在其所监视的服务本地运行,因为正如我前一阵子所写,网络并不可靠。