Perlでログをチェックしエラー情報をメール送信するプログラム

   ブックマークに追加する



あるディレクトリにあるログファイルのなかからエラー情報を抜き出し、指定したメールに送信するというプログラムを書きました。cron登録して毎日エラーチェックしています。サーバの都合上、Perl5.8.0でCPANは使用できず。Linux、EUC環境でログファイルはShift-JISという環境で動作しています。メールはsendmailを使用しています。

1度チェックしたファイルはbackupディレクトリに移動し、2度はチェックしないようになっています。

ソースはクリエイティブコモンズでお願いします。

#!/usr/bin/perl

use strict;
use File::Copy;

require "mimew.pl";
require "jcode.pl";

my $ERROR_DIR = '/var/log/error';
my $BACK_UP = '/var/log/error/backup';

opendir(DIR, $ERROR_DIR) or die;
foreach (readdir(DIR)){
  my $file = $_;
  my $error = "";
  next if $file =~ /^\./ ;
  next if $file =~ /backup/ ;
  open(FILE, $ERROR_DIR."/".$file ) or die;
  foreach (){
    $error .= $_ unless $_ =~ /,0,0,/;
  }
  close(FILE);
  print $file."\n";
  jcode::convert(\$error, 'euc', 'sjis');
  if ( length($error) > 1 ){
    sendmail($file, $error)
  }
  move $ERROR_DIR."/".$file, $BACK_UP."/".$file or die "move Error. $!";
}
closedir(DIR);

sub sendmail(){
    my @arg = @_;
    my $sendmail = '/usr/lib/sendmail';

    my $to = "to\@example.com"; 
    my $from = "from\@example.com";
    my $subject = @arg[0];
    my $body = @arg[1];

    jcode::convert(\$body,'jis', 'euc');
    jcode::convert(\$subject,'jis', 'euc');
    $subject = mimeencode($subject);

    open(MAIL,"| $sendmail -t");

    print MAIL "To: $to\n";
    print MAIL "From: $from\n";
    print MAIL "Subject: $subject\n";
    print MAIL "\n";
    print MAIL "$body\n";

    close(MAIL);
}

トラックバック(0)

このブログ記事に対するトラックバックURL(トラックバックは承認後に公開されます)

コメントする

このブログ記事について

このページは、Humが2008年6月19日 01:06に書いたブログ記事です。

ひとつ前のブログ記事は「Blogger(ブロガー)でFTPパブリッシュするとConnection timed outになる」です。

次のブログ記事は「RubyでHTMLファイル生成(Excelデータを一括でHTMLファイルにする)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ
フィードメーター - ウェブ-HACKS 「とりあえずやってみよう!」ブログ   
track feed
  • SEO対策 
  • _ 
  • _ 
  •  
  •  

このブログはクリエイティブ・コモンズでライセンスされています。