web-dev-qa-db-ja.com

Procmailの断続的なファイルロックの問題を修正

Mboxファイルに書き込むときにprocmailファイルのロックタイムアウトに関する次の問題を見た人はいますか?これは、次のprocmailrcを持つユーザーの場合、数週間ごとに発生します。

:0 c:     #copy all mail to "bkp"
bkp

ほとんどの場合、これは問題なく機能します。数週間ごとに、次のメッセージがprocmailログに表示されます。

procmail: Forcing lock on "bkp"
procmail: Timeout, was waiting for "bkp"

Postfixコマンドのタイムアウト(現在は1時間に設定されています)が発生する前に、procmailがロックを解除できる(またはロックが消える)場合があります。それ以外の場合、メール配信は次のように失敗します。

relay=local, delay=2001, delays=0.78/0.05/0/2000, dsn=5.3.0,
status=bounced (Command time limit exceeded: "procmail -t -f-")

Bkpファイルは非常に大きい(10ギガバイトを超える)が、問題のインスタンスの間に数週間の断続的な問題があり、同じprocmailrcおよびギガバイトサイズのファイルを持っている他のユーザーには発生しません(ただし、これほど大きいものはありません) )。

ユーザーはMailDirスタイルのフォルダーを使用したくないので、これをmboxファイルとして保持したいと考えています。 procmailがbkpのロックを待機している間に、ユーザーのメールボックスへのメール配信を許可するようにスクリプトを書き直す方法はありますか?私はもう試した:

:0c      #copy all mail to "Saved"
{
 :0:
 bkp
}

EDIT: wがプログラムを待機していて、このステートメントでは何も実行されていないため、上記のレシピを:0 w:から:0:に変更しました。

テスト中にbkpを手動でロックすると、procmailが再びメールの受け入れを停止する前に2つのメールが許可されます。接尾辞がタイムアウトする前にロックを解除すると、メールが配信されます。また、ロックの問題の根本原因を特定したいのですが、ファイルを自分でロックする以外に、まだトリガーできていません。 LOCKTIMEOUT = 10を追加して、通常のメール配信で成功せずに条件を強制しようとしました。

Procmailのバージョン情報は次のとおりです。

procmail v3.22 2001/09/10 Copyright(c)1990-2001、Stephen R. van den Berg Copyright(c)1997-2001、Philip A. Guenther

以下に送信して、procmail関連のメーリングリストに質問/回答を送信します。

そしてもちろん、このリストのサブスクリプションと情報のリクエストは次のとおりです。

ロック戦略:dotlocking、fcntl()デフォルトのrcfile:$ HOME /.procmailrcプライマリグループによって書き込み可能である可能性があります

1
John H

これが私がしたことです:

  • 問題をテストするために、debian squeezeのvmwareイメージを作成し、マシンのディスクIOPSを40に、メモリを256MBに制限しました。

  • Postfix、dovecot、procmailを本番マシンでセットアップしたのと同じ方法で使用しました。

  • ユーザーアカウントを作成し、procmailが書き込むための大きな数ギガバイトのファイルを作成しました。
  • Outlookとローカルコピー操作の実行中にドライブのディスク使用量I/Oとtps値を監視するために、nmonとsysstatをインストールしました。

私が見つけたもの:

  • Postfixでコマンドタイムアウトを取得するのは比較的簡単でしたが、それでもユーザーが経験するロックエラーを生成することができませんでした(fcntlを使用してファイルをロックする場合を除く)。
  • 保存アーカイブとして4GBのファイルを選択し、サーバーに1.3 GBのファイルをコピーしながら、Outlook2011のそのIMAPフォルダーで[フォルダーの修復]を実行しました。これにより、サーバーディスクで十分なI/Oが発生し、procmailでタイムアウトが生成されました。

完全に決定的なものではありませんが、procmailがロックしようとしているメールファイルにアクセスするOutlookクライアントに加えて、ディスクの負荷が高いと、postfixで設定されたコマンドタイムアウトに達するほどメール配信が簡単に遅れる可能性があります。

私が試したことのないこと:

  • ソースを再コンパイルせず、procmailソースのFAQ 16)に従ってロックを無効にしませんでした。私の場合、エラーは非常にまれであり、ローテーションの回避策があります。ファイルを小さく保つために定期的に保存しました。
0
John H

より小さな毎日/毎週のバックアップメールボックス/ファイルの使用を検討しましたか?

Cronジョブを使用して、それらをメインバックアップに移動できます。

man procmailexは、date出力に基づいて宛先名を取得する方法の例を示しています。
man procmailは、formailを使用してメールボックスファイルを後処理する方法の例を示していますロックあり

0
AnFi