我们有一个内部 IIS 服务器,它托管多个重定向到外部托管 Web 应用程序的网站。有时人们会做一些疯狂的事情,比如重启服务器、停止服务、拔掉电缆,随便什么都会发生……我想每 15 分钟验证一次我们的内部 IIS Web 服务器是否正常运行,如果没有,请尝试重启服务并给我发送电子邮件。
我编写了这个 powershell 脚本,但不确定这是否是实现此目的的最佳方法?
###################################################################
# Summary: Verify W3SVC service is running, send email if it's down
###################################################################
##############################
# Get service status
##############################
$serviceName = "W3SVC"
$serverName = hostname
$status = (Get-Service $serviceName).Status
if ($status -ne "Running"){
sendMail "$serviceName" "$serverName" #sendmail is a function (not shown)
Restart-Service $ServiceName
}else{
# Service is running, do nothing;
}
但是我不确定这是否W3SVC
是检查 IIS7 是否启动的最佳服务?我是否还需要检查WAS
?IISADMIN
是否有可以完成所有任务的服务?
我也考虑过检查这些主机的 HTTP 状态代码,但即使网站已关闭而 IIS 已启动,我的返回代码也会返回200
。这更像是一个头脑风暴的想法,是否有更好的“最佳实践”来完成这样的事情?
$url = "http://intranet_site"
$xHTTP = new-object -com msxml2.xmlhttp;
$xHTTP.open("GET",$url,$false);
$xHTTP.send();
$xHTTP.status # returns the status code
if ($xHTTP.status -ne "200"){
sendMail "$serviceName" "$serverName"
Restart-Service $ServiceName
}
这更像是一个头脑风暴的想法,有没有更好的“最佳实践”来实现这样的事情?我想验证网站是否正常运行并且重定向是否正常工作。
答案1
如果您想检查某个网站是否可用,最好的方法是请求一个页面并检查其内容。除了第二个脚本中的状态代码外,还要检查$xHTTP.responseText
或$xHTTP.responseXML
。不过,您可能希望从另一台主机运行此检查,否则尽管网站在主机本身上可用,但数据包过滤器或连接问题等因素可能会阻止访问。