如何在HTTP 503错误后自动重启Apache服务?

我们的生产服务器在CentOS5.2上运行Apache v2.2.4。 Mono v1.2.4集成在Apache中。

最近,我们在生产服务器上遇到了一个问题。 从Apache的access_log中,我发现其中一个HTTP请求发生HTTP 500内部服务器错误,所有后续的HTTP请求也失败,但HTTP 503服务不可用错误。 从此之后,这些请求都没有成功。 此外,只有晚些时候,我们意识到我们的应用程序不能正常工作,因为这个错误,然后我们重新启动Apache服务。

我的问题是,

  1. 在这种情况下,遇到HTTP 503错误时,如何自动重启Apache服务? 有没有可用的Apache指令设置?
  2. 一般来说,什么会导致在Apache的HTTP 503错误?

注意: Mono有助于运行基于Linux的操作系统上使用.NET开发的应用程序。

编辑:我同意find这个问题的根源。 实际上,我们也一直在分析。 直到我们解决它,我们会发现是否可以立即自行重新启动,而不会对应用程序用户造成任何停机/服务中断。

503错误通常与正在服务的应用程序上的错误或configuration错误有关。 它应该是在Apache的错误日志(如果您没有错误日志,使用ErrorLog指令在configuration上启用它,并控制LogLevel所需的错误日志级别)。

您可以使用monit来检查一个页面,看看确定的页面的HTTP代码是否正确,如果不是的话(如重启apache)。

我不认为你可以,或者应该。 你最好离开服务器,并试图find问题的根源。 恕我直言,错误重新启动是一个糟糕的政策一般。

如果你仍然坚持,试着看像SWATCH监视你的Apache日志,并采取503错误的行动。

你应该真的解决这个问题,但你可以运行这样的临时解决scheme:

 #!/bin/sh HTTP_STATUS=`lynx -head -source http://mysite.com |head -1 |awk '{print $2}'` if [ "$HTTP_STATUS" = "503" ] then /etc/init.d/http restart fi 

你可以在你的httpd.conf有如下的东西:

ErrorDocument 500 /cgi-bin/handle-500-error.pl

只要遇到错误,就会调用脚本,并将其设置为重新启动服务器。

我遇到了一个503错误,当我在Apache后面的反向代理服务器closures了。 重新启动反向代理的服务可以修复它,但是如果closures了该服务,则会出现此错误。

也许一些扩展正试图联系另一个没有运行的服务,或者超时。

这是我明白你想要的:

你想要一些东西来监视日志,并立即重新启动Apache,如果发生特定的错误。 你不想每分钟都去探索,只要看日志。

你可以做到这一点,但它可能会给你一个性能问题,虽然这不会花费你很多的服务器功耗。

然而! 这通常不是一个好主意,因为有些人可以在日志文件中find你正在寻找的东西,然后继续在URL的末尾使用该string做出404错误。 但:

编辑configuration文件并将错误日志传递给脚本,例如:

 ErrorLog "| /bin/bash /scripts/logMonitor.sh" 

然后创build该脚本,它可能是这样的:

 #!/bin/bash while read input; do if [[ $input == *someError* ]]; then echo "--- ERROR REGISTERED - RESTARTING APACHE ---" >> /tmp/err.log /etc/init.d/apache2 restart fi # Always log what is thrown at us. echo "$input" >> /tmp/err.log done 

这将做你所要求的,但它是丑陋的,不build议。