postfix + procmail-序列處理,而非平行處理

postfix + procmail-序列處理,而非平行處理

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

答案1

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

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

O當然還有其他方法您預計在高峰時段和平均時段每小時處理多少條訊息?

答案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=

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

相關內容