我们的生产服务器在CentOS5.2上运行Apache v2.2.4。 Mono v1.2.4集成在Apache中。
最近,我们在生产服务器上遇到了一个问题。 从Apache的access_log中,我发现其中一个HTTP请求发生HTTP 500内部服务器错误,所有后续的HTTP请求也失败,但HTTP 503服务不可用错误。 从此之后,这些请求都没有成功。 此外,只有晚些时候,我们意识到我们的应用程序不能正常工作,因为这个错误,然后我们重新启动Apache服务。
我的问题是,
注意: 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议。