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

Posted

技术标签:

【中文标题】如何配置 apache 以在每个 HTTP 错误 500 上发送电子邮件【英文标题】:How can I configure apache to send an email on every HTTP error 500 【发布时间】:2012-08-25 22:57:44 【问题描述】:

我有一些在 apache2 上运行的服务器应用程序; Ruby on Rails、php 等。

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

我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢您提供出色的解决方法。然而,这些应用程序都有一些错误 500 的自定义页面。典型的 Rails 应用程序有一个文件 public/500.html,它会在内部服务器错误时显示。您的提议会干扰这些特定于应用程序的错误文档。 @Jarl 好吧,你可以尝试解析 apache 日志文件,或者写一些从 tail -f 读取输出的东西【参考方案2】:

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

你可以做一些事情来达到同样的效果:

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

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

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

【讨论】:

ErrorDocument 仅捕获 Apache 错误,而不捕获 PHP 致命错误。 Source【参考方案3】:

创建一个名为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 分钟只有 1 封电子邮件)。 cron 作业的结果将自动通过电子邮件发送给您(如果 cron 设置正确)

【讨论】:

此脚本如何知道我的电子邮件 ID? @ShahAbazKhan 脚本使用 cron 使用的电子邮件地址。它没有在脚本中设置。

以上是关于如何配置 apache 以在每个 HTTP 错误 500 上发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何配置spring拦截器以在每个请求中调用

配置 Apache 反向代理以在生产环境中托管 Laravel Echo 服务器

配置 httpd.conf 以在 Apache Red Hat Linux 上添加新站点

如何在 Apache 中停用通知?

如何在 Azure 上配置 Cassandra

如何设置 Python 脚本以在 Apache 2.0 中工作?