如何配置apache以在每个HTTP错误500上发送电子邮件

时间:2012-08-31 06:32:07

标签: http apache httpd.conf

我在apache2上运行了一些服务器应用程序; Ruby on Rails,PHP等。

在所有情况下,只要apache响应HTTP错误500内部服务器错误,我希望apache给我发送电子邮件。

我该怎么做?

3 个答案:

答案 0 :(得分:11)

你可以这样做的一种方法是使用发送电子邮件的PHP脚本,以及输出某种500条消息。然后使用ErrorDocument指令:

ErrorDocument 500 /path/to/script/that/sends/email.php

答案 1 :(得分:10)

无法配置apache来发送电子邮件。

您可以采取一些措施来实现相同的结果:

  1. 您可以使用ErrorDocument directive让它指向某些CGI 脚本,是perl,PHP或任何其他服务器端执行的 脚本。然后,该脚本可以发送电子邮件并回复错误500 文档。

  2. 您可以使用一些外部工具来查看您的apache日志 文件并配置theese工具向您发送电子邮件。有几种工具和方法可以做到这一点。对于很多Linux 建议使用工具和方法 https://serverfault.com/questions/45246/linux-monitor-logs-and-email-alerts

  3. 编写一个apache模块。我认为mod_tee是一个很好的起点。

答案 2 :(得分:4)

创建一个名为log_monitor.sh的脚本:

#!/usr/bin/perl -w

use strict;

my $cachefile="/var/cache/lastpos-apache2-scan4maxclntOrSigKill";
my $logfile="/var/log/httpd/error_log";
my $searchstr=" 500 ";

my $lastpos=0;
if (-f $cachefile) {
    open FH,"<".$cachefile;
    $lastpos=<FH>;
    close FH;
};

my $newpos=(stat $logfile)[7];

open FH,"<".$logfile;
seek FH,$lastpos,0;
while (<FH>) {
    print if m/$searchstr/i;
};
close FH;

open FH,">".$cachefile;
print FH $newpos;
close FH;

根据需要修改$searchstr。请注意“500”周围的空格,因为您不希望在其路径或文件名(以及其他位置)中包含“500”的文件中匹配包含404的错误。

将脚本配置为通过cron每隔X分钟运行一次。 X的值越大,您获得的电子邮件就越少(对于与您提供的字符串匹配的所有错误,每X分钟只发送一封电子邮件)。 cron作业的结果将自动通过电子邮件发送给您(如果正确设置了cron)