- 締切済み
qmailによるメールの受信について
質問場所がこちらでいいのか迷ったのですが、もしお分かりの方が見ていられましたらご解答頂ければ幸いです。 現在qmailにより2個の受信設定をしております。 一個はキャッチオール的な形でアカウントが存在しない物を ファイル名 .qmail-default 中身 | /home/vpopmail/bin/vdelivermail '' cach@acount.net ファイル名 .qmail-cach 中身 |/usr/home/acount/www/root/getimg.php と言う設定で画像ファイルを受信するスクリプトを組んでおります。 その同じメールサーバー内で ファイル名 .qmail-gup 中身 |/usr/home/acount/www/link/pop.php でgup@acount.net宛に届く物をpop.phpに渡す設定を作りました。 そうしました所、スクリプト内に両方とも正しくデータが渡り処理がされるのですが、 gup@acount.net宛のものに関しては一度送るとその後何も送らない状態でもメールが来たと判断されるのか、何秒か置きに常にスクリプトが起動している様子になってしまいました。 サーバー屋にも問合せをしたのですが原因が分からないと言う形の解答が来ました。 エラーが出る場合は常にメールサーバーにPHPのスクリプトエラーが出ていましたが、エラー部分は解消した為エラーは出なくなり、問題がなさげな形なのですが、一度エラーがあるスクリプトをアップすればまた数秒おきに常に出ている感じなってしまいます。 そう考えると何か無限ループ的な物に陥り常にサーバーにも負荷を掛け続けてるのではないかと不安になっております。 何が原因か分からない物でこれを見て分かる方がいらっしゃいましたら、何卒良きアドバイスとご解答を頂ければと思います。 皆様ご多忙中とは思いますがよろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- w_i_k_i
- ベストアンサー率100% (1/1)
ANo.4での追加回答です >> 再度過去のエラーの起こるスクリプトを入れただけの状態 >> (メール送信等もしてない)で突然また10秒毎位のペースで >> エラーが保存されるのかが不明でした。 PHPのエラーログではなく、qmailの配信ログを確認してください。 エラーの有無に関わらずどのスクリプトでも再送されている場合は kofumatuさんのプログラム自体が、PHPとしてはエラーは無くても qmail-commandとしての要件をまだ満たしていない可能性が有ります。 正しいEXIT CODESを返せないバグのあるスクリプトになっている等
- w_i_k_i
- ベストアンサー率100% (1/1)
ANo.3での追加不明点への回答です >> この解答で気になる点がありました。 >> 再処理しているのであれば何故メールデータが空なのか? もともと一時的な処理不能状態の回避処置が目的の再処理ですから、同じ処理を繰り返しているだけで初回か空なら毎回空です。 そもそも、何故空なのかが問題です。このスクリプトを実行前に何らかの処理をさせていないか?スクリプトにtypo等が無いか?などを調べてみてはいかがでしょう まずは、下記の処理を事前に入れて調べるなどして標準入力が本当に空なのかの確認からかな |/bin/cat >> /home/<書込み権限の有る任意のパス>/stdin.log >> また、一度エラーを出した後直したスクリプトをアップ後エラーが >> 出なくなり、その後またエラーのあるスクリプトを入れるとまた >> エラーが保存される形になってしまう点がわかりません。 私の誤読かもしれませんが、 正常なスクリプトではエラーが無く、エラーのあるスクリプトではエラーが記録される。 このどこを気にしているのでしょう。
- w_i_k_i
- ベストアンサー率100% (1/1)
>> 一度エラーがあるスクリプトをアップすればまた数秒おきに >> 常に出ている感じなってしまいます。 pop.phpがエラー発生時にどのようなEXIT CODE を吐き出すようにプログラムを組んでいるかにも依存しますが、qmail-commandのソフトエラー発生時は一定時間後に再処理するのが仕様です。開示されている情報を見る限りqmailが仕様通りに 再処理を起動しているだけに見えます。エラー無し時に正常動作しているなら問題無いと考えます。 ご自分でスクリプトを組む場合は、qmail-command(8) のmanualを一読することを薦めます
お礼
ご解答ありがとう御座います。 なんとなく?理解したと思いますが、この解答で気になる点がありました。 再処理しているのであれば何故メールデータが空なのか? また、一度エラーを出した後直したスクリプトをアップ後エラーが出なくなり、その後またエラーのあるスクリプトを入れるとまたエラーが保存される形になってしまう点がわかりません。 またそのエラー発生時にPHP内ではEXIT CODEというのが分からないのですが、fopenでSTDINを読込む際にファイルが空の為ファイル読み込み時にエラーになって処理しないで終了みたいな形になっていた感じでした。 ソースは $fp = fopen("php://stdin","r"); while (!feof ($fp)) { //←$fpが空の為エラー $buffer = fgets($fp, 4096); //←$fpが空の為エラー $tmp .= $buffer; } ここでエラーになっており$tmpが空の為その下のスクリプト内で空の場合はexit; としておりました。そこをifで$fpが無い場合はexitにして解消はしたのですが、その後なんか気になってしまい再度エラーが出るスクリプトをアップしたらまた同じ様にphp_error.logがメールサーバー内に溜まっていきました。 qmail-command(8) のmanualもちょっとこちらでは良く分からなかったので本等を購入し見てみます。
- memphis140
- ベストアンサー率34% (100/288)
qmailもしくは、cronのログには何か手がかりになるような情報はありませんか? もし、内容ならsyslogdに出力する情報を多くして、それを元に原因を追究されては?
補足
CRONのログとはサーバー屋に聞けば分かるものでしょうか? syslogdと言う物も今ひとつ分かってないのですが、これはサーバー屋に聞いてみます。
- wp_
- ベストアンサー率54% (132/242)
片手間に、似た環境を作りましたが再現しませんでした。 可能性としては ・SPAMがqmailに到達するまでに完全にフィルタリングできていない ・cronでうっかり設定されている ・ルータ、ロードバランサの類がpingを叩いてきている(はた迷惑な・・・ ですかね。ほかの識者様の意見が聞いてみたいです。 なんにせよ、パケットの監視をしてみてはいかがでしょうか。 php起動のトリガがqmailなのか、それ以外の要因なのか分かるだけでも 対処方法が変わってくる気がします。
補足
ワザワザ環境までして頂きありがとう御座います。 なんか多少知っている人に聞いたらWebサーバーとメールサーバーが一緒だと起きる可能性があると言われました。 まずSPAMはありえないかと思います。 先日作ったばかりのドメインでアカウントも作ったばかりに起きた現象なので? 後、メールが実際に来ていればそれなりの処理がされエラーログも出ない作りにPHPをしている為それもないかと思います。 CRONは多分大丈夫だと思います。 最後のルータ、ロードバランサは良く分からないのですが、これもサーバー屋に聞いて見ます。 後パケットの監視等もしてみる事にします。
お礼
ご解答頂きありがとう御座いました。 少しまだ漠然としてはいますがなんとなく?理解出来たかと思います。 本当にありがとう御座いました。 最後のエラーが無くエラーのあるスクリプトではエラーが記録される。 この点は、 最初にエラーが起こるスクリプトが入っている状態でメール送信。 (この時点でエラーが約10秒おきに溜まっていきました。) そのエラー部分を修正。 (この時点ではエラーがたまらなくなりました。) その後直ったのか?と思い再度過去のエラーの起こるスクリプトを入れただけの状態(メール送信等もしてない)で突然また10秒毎位のペースでエラーが保存されるのかが不明でした。