私はいくつかのサーバーアプリケーションをapache2で実行しています。Ruby on Rails、PHPなど。
いずれの場合も、apacheがHTTPエラー500内部サーバーエラーに応答するたびに、apacheからメールを送信したいと思います。
どうやってやるの?
私はいくつかのサーバーアプリケーションをapache2で実行しています。Ruby on Rails、PHPなど。
いずれの場合も、apacheがHTTPエラー500内部サーバーエラーに応答するたびに、apacheからメールを送信したいと思います。
どうやってやるの?
これを行う 1 つの方法は、電子メールを送信する php スクリプトを使用し、ある種の 500 メッセージを出力することです。次に、ErrorDocument
ディレクティブを使用します。
ErrorDocument 500 /path/to/script/that/sends/email.php
同じ結果を得るためにできることがいくつかあります。
ErrorDocument ディレクティブを使用して、perl、PHP、またはその他のサーバー側で実行されるスクリプトである CGI スクリプトを指すようにすることができます。その後、スクリプトは電子メールを送信し、エラー 500 ドキュメントに応答できます。
外部ツールを使用して apache ログ ファイルを監視し、これらのツールを構成してメールを送信できます。これを行うには、いくつかのツールと方法があります。Linux の場合、 https://serverfault.com/questions/45246/linux-monitor-logs-and-email-alertsで多くのツールと方法が提案されてい ます
Apache モジュールを作成します。mod_tee は良い出発点だと思います。
というスクリプトを作成します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 が適切にセットアップされている場合)。