长话短说——我们有 2 个运行第三方 asp.net 应用程序的 Web 服务器 (IIS 6)。它们会随机(到目前为止)停止工作。我有一个外部检查,它会在一分钟左右的时间内告诉我它何时停止工作。现在我必须通过 RDP 进入机器并发出 iisreset。这很好,直到我不在机器旁并且必须到达一个 PDQ。
我编写了一个简单的页面,它将在有问题的远程计算机上发出 iisreset。这通常有效。有时“iisrestart \machinename”会停止 IIS 服务,但不会重新启动它,这很糟糕。
理想情况下,我想知道是否可以停止服务,尝试启动它,如果它在 10 秒内没有启动,则尝试再次启动它。但我不知道如何远程监控服务的状态。
有人能给我指明正确的方向吗?
答案1
我认为你最好在无响应的服务器上回收受影响的应用程序池: http://technet.microsoft.com/en-us/library/cc770764(WS.10).aspx
如果您运行 IIS6,这可能会很有趣(从广义上讲它也适用于 IIS7): http://blogs.msdn.com/b/david.wang/archive/2006/01/26/thoughts-on-application-pool-recycling-and-application-availability.aspx
但你能做的最好的事情可能是对应用程序进行故障排除,并确保它首先不会停止工作
更新:由于您使用IIS6,请阅读上面的文章,并查看以下内容:http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/1eee28e2-b319-4b4e-8267-a8c0aa0dcf36.mspx?mfr=true
几年前,Chris Adams 发表了一篇博客文章,其中介绍了一个小应用程序来回收 IIS 应用程序池(利用 WMI),这可能会派上用场: http://blogs.iis.net/chrisad/archive/2006/08/30/Recycling-Application-Pools-using-WMI-in-IIS-6.0.aspx
答案2
四五年前我处理过类似的问题,只不过当时内部应用程序正在被重写。
如果事件日志中引发任何类型的事件,您可以设置一个监视该事件的接收器并通过 vbs / wmi 发出脚本重置。
查看官方 MS 文档。
编辑-丑陋..如果您有 Nagios,您可以根据页面响应时间设置一个事件处理程序来执行重置/回收。