Email

postfix + procmail – 串列處理,而不是並行處理

  • May 31, 2017

嘗試設計一個可以過濾來自系統日誌伺服器的傳入電子郵件消息的系統。如果它們看起來是重複的,則需要刪除(限制它們)。Procmail 將它們通過管道傳送到 perl 腳本進行處理。一切正常,除非我一次收到一大堆電子郵件,postfix 似乎會產生多個管道腳本實例。顯然這在大多數情況下是可取的,但是對於這個項目,我必須能夠一次處理一個傳入的消息,以便可以使用時間戳更新數據庫欄位,以便可以刪除符合條件的後續消息轉發給收件人。**有沒有辦法將這些傳入消息“排隊”一次處理一個,而不是並行處理?謝謝。

您可以使用 procmail 的鎖定來使多個實例在給定時間執行 perl 腳本的一個實例。見man procmailrcman procmailex

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

O 當然還有其他方法**,但是**您希望在高峰和平均小時內每小時處理多少條消息?

要添加到 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=

原則上,您可以有多個由同一個鎖文件保護的關鍵部分,儘管我很難想到這實際上是有用的場景。

引用自:https://unix.stackexchange.com/questions/367441