(2011/7/7追記)どうも、以下のプログラムでは、メール送信プロセスが 正しく終了せず、メール送信プロセスが溜まってしまう。 muninのcontact.XXX.command にスクリプトを書くのはまずいみたい。 "/usr/bin/perl /...PATH.../notify.pl..." とすれば動いた。 どうも、command にスクリプトが書いてある場合"sh -c" してくれているんだけど、 何か不具合があるような...
muninで、USBRTの温度監視ができて、munin-limitで警告メールがだせるようになった。 でも、本来の目的は家猫の体調のためなので、警告温度は34℃ほどに設定したら、 設定温度を越えたら5分おきに、ずーっとメールが届く。 さすがに、職場じゃ大量のメールが届くので、状態が閾値を越えたときにだけメールが欲しい。
メールを送るスクリプトに、warning,criticalのデータ件数をつけて呼び出すようにして、 件数が変化していなければ、メールを送らないようにした。
(( /etc/munin/munin.conf )) contact.nagios.command \ /usr/bin/perl /etc/munin/my-plugins/notify.pl \ # (7/7修正) "${var:numwfields}:${var:numcfields}" \ "[Munin] tsaitoh.net" \ 携帯メアド (( notify.pl )) #!/usr/bin/perl exit 0 if ( @ARGV < 3 ) ; my $stat = shift @ARGV ; my $subj = shift @ARGV ; my $mailto = shift @ARGV ; my $last_file = "/var/run/munin/munin.last-stat" ; my $last_stat = "" ; # 前回の状態を読み込む if ( open( FH , "$last_file" ) ) { $last_stat = <FH> ; chomp( $last_stat ) ; # chompの使い方間違ってた... close FH ; } if ( $stat eq $last_stat ) { # 状態の変化がなければ報告しない exit 0 ; } else { # 状態を記録しておく if ( $stat eq "0:0" ) { unlink( $last_file ) if ( -f $last_file ) ; } elsif ( open( FH , ">$last_file" ) ) { print FH "$stat\n" ; close FH ; } # 報告を送信する if ( open(FH,"|/usr/bin/mail -s \"$subj\" \"$mailto\"") ) { while( <> ) { print FH $_ ; } close FH ; } }