/usr/bin/mailにキューがありますか?

/usr/bin/mailにキューがありますか?

RHEL 5

私は古いRHEL 5システムで実行されているPerlサービス監視スクリプト(会社で働いていない同僚が書いた)を使用しています。サービスがダウンすると、root ユーザーに電子メール警告を送信します。

            # Email administrator
            if ($retval == 0 && $config{'MAX_EMAILS'} > 0) {
                $service_restarts{$service} = 0;
                system("echo \"This notification was generated because $service was down and has been successfully restarted.\"
 | /bin/mail -s \"Monitor: $service restarted ($date)\" root");
            }

私は/etc/aliases以下を持っています:

root:            [email protected]

私の質問は、ルートに送信されたメールを外部エイリアスとして転送するためにどのサービスを実行する必要がありますか?これらのサービスが中断された場合、まだ/usr/bin/mailキューがありますか?

ベストアンサー1

mailとても愚かなことです。通常、メッセージをsendmailバイナリに転送するだけです。残念ながら、さまざまな実装方法があるため、mail使用している正確なバージョンに対してどのようなエラー処理が行われているかを確認するには、ドキュメントまたはコードを確認するのが理想的です。

メール転送エージェント(MTA)の一部であるメールサービス(RHEL5ではSendmailまたはPostfixの可能性が高い)に加えて、DNSも必要になる場合があります。 MTAがメールを送信するsendmailにはDNSルックアップを実行する必要があるためです。fooexample.blah一時的なエラーが発生し、電子メールがMTAキューディレクトリのどこかにある場合でも、MTAキューランナーが存在する可能性があります(RHEL MTAにはデフォルトでこれらのキューランナーが含まれています)。ああ、ファイルシステムが/varいっぱいになると、MTAは追加のメールをキューに入れることができないため、メールを受け入れることができない可能性がありますmail。 (特に、他のエラーのためにアラームシステムがいっぱいになり、より多くの/varアラームを生成してから再び発生した場合は、ポケットベル会社に電話する必要があります。これは、ポケットベルが数え切れないほど多くのアラームを受信したため、ポケットベルを無効にしたためです。お見逃しなく。

...そしてサービスを定義したい範囲に応じて、ビジネスネットワークもあります。オプションですが、一般的なスパム対策サービスもあります。 Gmail または Exchange で通知をスパムとして拒否または削除するとどうなりますか?

また、呼び出しにはエラーチェックがありませんsystemmail(またはforkexec呼び出しが失敗する可能性があり、その後はどうなりますか?より合理的なアプローチは、これらの失敗をどこかに記録することです。

use Sys::Syslog;
openlog("homegrown-monitoring-101", "ndelay", "user");

system("echo ... root") == 0
  or syslog(LOG_ERR, "non-zero exit code from mail command");

それなら理想的にはそれはまるでsec.plログを確認しhomegrown-monitoring-101て報告します(ログメッセージごとに1つの電子メールを送信する一般的なクローンスパムの代わりにグループ化された概要を介して...)。

mailあるいは、MTAがdead.letterファイルをどこかに残すことができ(必要な場所に書き込むことができると仮定)、理論的には監視を介してそのファイルを確認できますが、新しい警告があり、警告が電子dead.letterメールで送信される場合は、エラーを報告するための追加のプロトコルが必要になる可能性があります。あります。この場合。

centos 7システムでは、代わりにこのperl-Email-Senderパッケージを使用してmailメッセージの場所を渡します。

#!/usr/bin/perl
use 5.16.0;
use warnings;
use Email::Sender::Simple qw(sendmail);
use Email::Simple;
use Email::Simple::Creator;

...

my $message = ...;
my $email = Email::Simple->create(
    header => [
        To      => $username . '@example.edu',
        From    => '[email protected]',
        Subject => "...",
    ],
    body => $message,
);
sendmail($email);

おすすめ記事