プロが教えるわが家の防犯対策術!

環境は、レンタルサーバで、各機能のバージョンは以下の通りです。

Apache/1.3.41 Ben-SSL/1.59 (Unix)
Perl v5.6.1 built for i386-freebsd
Version 8.13.1

現在、「sendmail -t」にて複数のメールを送信していますが、サーバの負荷によりsendmail処理が遅延し、そのプロセスが終了する前に次の新たなSendmailコマンドを発行すると

rejecting commands from localhost [127.0.0.1] due to pre-greeting traffic

で強制終了されてしまいます。
sendmailをcloseしてから、数秒タイムラグを置いてみても、サーバ負荷の遅延がタイムラグより大きくなる事があるようで困っています。

そこで、メールが送信終了(sendmailが送信プロセスを終了)した事を確認してから、次の処理に進みたいと考えていますが、perlプログラム内で終了ステータスを受ける事が出来るのでしょうか?
その他、強制終了を防ぐ方法がありましたらアドバイス願います。

ちなみに、レンタルサーバ業者にsendmail送信件数上限を確認した所、150件/分との事でした。
現在、10件/分程度の送信間隔としていますので、上限閾値を超えているような送信はしていないと思います。

A 回答 (3件)

共有サーバだとダメ(他のユーザがsendmailを使うかも)でしょうが、専用サーバならばメールのキューを監視することである程度は分かるかも知れません。


毎分150通とは随分低い設定ですね。
迷惑メールの大量送信阻止なのかも知れないですが、だったらキューに位入れさせてくれって感じですね。
プロセス数で分かるなら、

a$ = `ps -ax | grep sendmail | wc -l`;
これで数えちゃうのも手だとは思います。
    • good
    • 0
この回答へのお礼

早々のアドバイスありがとうございます。
サーバは共有サーバです。

さっそくプロセス数をチェックしてみたところ、
メール送信直前で5~9辺りのプロセスとなっていました。
このプロセスに閾値を設定して、
超えるとタイムラグ秒数を多くするようなプログラムで試してみたいと思います。

ありがとうございました。

また、sendmailは終始このプロセス数なのですが、
一般のサーバとしてこの数値はどのレベルなのか
アドバイス頂ければ幸いです。

お礼日時:2009/06/03 11:40

> 一般のサーバとしてこの数値はどのレベルなのか



これは管理側のポリシーなので何とも。
メモリに余裕があれば数百のsendmailプロセスを走らせる事も可能な訳です。
もっともメール送信にはDNS引きなども関係するので、その辺りのソケットも消費することになりますから共有サーバではある程度制限しているのかも知れないですね。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
共有サーバなので、こういうものなのかもしれませんね。
いろいろ負荷の状況を探りながら対応していきたいと思います。

ありがとうございました。

お礼日時:2009/06/03 14:03

sendmail は実行結果を exit status に返すので、


呼び出し側でそれを見れば、ある程度の状況判断は可能です。
http://www.linux.or.jp/JM/html/sendmail/man8/sen …
> EX_OK
> すべてのアドレスについて完全に成功しました。
> EX_NOUSER
> ユーザ名が認識できません。
> EX_UNAVAILABLE
> 処理に必要なリソースを得ることができません。
> EX_SYNTAX
> アドレスに文法的な間違いがあります。
> EX_SOFTWARE
> 引数が間違っているなどの、内部的なエラーです。
> EX_OSERR
> ``cannot fork''' のような、一時的な OS エラーです。
> EX_NOHOST
> ホスト名が認識できません。
> EX_TEMPFAIL
> メッセージはすぐには送られませんでしたが、キューには入れられました。

perl側で $? をチェックして、エラーになったときはしばらく待ってから再チャレンジするようにしてはどうでしょうか。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。

アドバイス通り、EX_OKステータス以外で再トライさせて
様子をみてみたいと思います。

ありがとうございました。

お礼日時:2009/06/03 14:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!