postfix + procmail - 並列処理ではなくシリアル処理

postfix + procmail - 並列処理ではなくシリアル処理

syslogサーバーから着信メールをフィルタリングできるシステムを設計してみてください。重複していると思われる場合は削除する必要があります(制限付き)。 Procmailは処理のためにPerlスクリプトに渡します。一度に多くの電子メールを受信し、Postfixがパイプラインスクリプトの複数のインスタンスを生成するように見える場合を除いて、これはすべて機能します。明らかに、これはほとんどの場合に望ましいですが、このプロジェクトではデータベースフィールドをタイムスタンプで更新して、基準に一致する後続のメッセージを削除して次に転送できるように、一度に1つの受信メッセージを処理できる必要があります。受信者。 **これらの受信メッセージを並列ではなく一度に1つずつ処理するように「キューに追加」する方法はありますか?ありがとうございます。

答え1

procmail のロックを使用すると、特定の時間に Perl スクリプトの複数のインスタンスを実行することができます。参照man procmailrcman procmailex

:0 w: script.lock
| /.../script.pl

もちろん他の方法もあります。しかし、使用率が最も高い時間帯と平均時間帯で、1時間あたりにいくつかのメッセージを処理すると予想されますか?

答え2

Andrzejのソリューションに追加するには、特別な変数を使用する必要がある場合は、LOCKFILE単一のレシピではなく、より広いロケールに対してロックを設定できます。

# Only one instance of Procmail can enter this region
LOCKFILE=.procmail-critical-region.lock

:0
* condition
| action

value=`program`

:0
* another condition
| another action

# We are done now; okay for another instance to enter
LOCKFILE=

原則として、同じロックファイルで保護されているいくつかの重要なセクションを持つことができますが、これは実際に役立つシナリオを想像するのは難しいです。

関連情報