6

私はいくつかのサーバーアプリケーションをapache2で実行しています。Ruby on Rails、PHPなど。

いずれの場合も、apacheがHTTPエラー500内部サーバーエラーに応答するたびに、apacheからメールを送信したいと思います。

どうやってやるの?

4

3 に答える 3

11

これを行う 1 つの方法は、電子メールを送信する php スクリプトを使用し、ある種の 500 メッセージを出力することです。次に、ErrorDocumentディレクティブを使用します。

ErrorDocument 500 /path/to/script/that/sends/email.php
于 2012-08-31T06:35:42.063 に答える
10

電子メールを送信するように apache を構成することはできません。

同じ結果を得るためにできることがいくつかあります。

  1. ErrorDocument ディレクティブを使用して、perl、PHP、またはその他のサーバー側で実行されるスクリプトである CGI スクリプトを指すようにすることができます。その後、スクリプトは電子メールを送信し、エラー 500 ドキュメントに応答できます。

  2. 外部ツールを使用して apache ログ ファイルを監視し、これらのツールを構成してメールを送信できます。これを行うには、いくつかのツールと方法があります。Linux の場合、 https://serverfault.com/questions/45246/linux-monitor-logs-and-email-alertsで多くのツールと方法が提案されてい ます

  3. Apache モジュールを作成します。mod_tee は良い出発点だと思います。

于 2012-09-03T10:33:10.207 に答える
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 分ごとに 1 つの電子メールのみ)。cron ジョブの結果は、自動的に電子メールで送信されます (cron が適切にセットアップされている場合)。

于 2013-10-11T19:40:00.290 に答える