我可以依赖什么条件来确定我的服务器是否“启动”的脚本?

时间:2010-07-30 16:49:15

标签: apache http language-agnostic head

我通常每周处理至少二十几台服务器。我认为创建一个查询每个脚本并确定它们是否“正常”的脚本是个好主意。

  • 服务器运行Apache2或IIS7。
  • 托管服务提供商不尽相同
  • 每台服务器上通常有多个站点
  • 设置不一致,直接访问ip时,并不总是有一个默认的apache“hello world”页面。
  • 网站都是虚拟主机

我在想,最好的方法是确定他们是不是只是从每个服务器上取一个站点并发出http HEAD请求以确保服务器的响应是200 OK?显然,如果出现以下情况,这将容易出现“误报”:

  1. 当应该返回4xx错误代码
  2. 时,站点配置/设置不正确地返回200 OK
  3. 如果禁用了某个站点(<VirtualHost>)的配置,或者该站点已移至其他服务器。
  4. 但是在大​​多数情况下,HEAD请求并且依赖200 OK应该是可靠的,对吗?同时确保域的A记录与列出的站点移动匹配。< / p>

    伪代码:

    import http
    
    list = {
      '72.0.0.0' : 'domain.com',
      '71.0.0.0' : 'blah.com',
    }
    
    serverNames = {
      'jetty' : '72.0.0.0',
      'bob'   : '71.0.0.0'
    }
    
    for each ( list as server => domain ) { 
        headRequest = http.head( domain )
        if ( headRequest.response == 200 && http.arecord(domain) == server ) { 
           print serverNames[server] + ' is up ';
        } else {
           print 'Server is either down or the site attached to the server lookup has moved.';
        }
    }
    

    我可能会用Python或PHP编写脚本,但这个问题只是讨论逻辑。

1 个答案:

答案 0 :(得分:3)

逻辑对我来说似乎很合理。我建议将其扩展为在apache服务器上使用mod_status模块。在进行头部检查后,还尝试获取/服务器状态并使用它来仔细检查您的服务器是否健康。我在想这样的事情:

statusRequest = http.get('/server-status')
if(statusRequest == 200) {
 // Make sure you don't have insane load averages, etc
}
else { /* Check something IIS specific, or just be happy the head check worked */ }

我过去使用的另一种技术是检查我知道应该给404的东西。这样你就有更好的机会知道服务器是否只是将200分发给任何要求的人。 (由于配置错误,我看过一次)

相关问题