簡體   English   中英

如何防止 procmail 使平台崩潰並使其一次運行一個進程?

[英]How to prevent procmail from crashing the platform and make it run one process at a time?

我有一個問題,我捕獲電子郵件並且它們大量到達,問題是每次它們大量到達時平台崩潰,問題是如何讓它 go 一次運行進程 1,這可能嗎? 因為目前我填滿了整個 procmail 服務器,其中同時有多個進程,再加上我們添加了正在工作的高管,服務器死機了,我們不得不重新啟動並從 procmail 中刪除數據以使其再次運行。

因為一旦我們捕獲數據,它就會開始工作並進行子流程。

這是代碼:

SHELL = /bin/sh
LOGFILE     = /var/log/procmail.log
LOGABSTRACT = "all"
VERBOSE     = "on"

:0c
| php /srv/platform/laravel/artisan platform:catchemail >> /var/log/procmail_catchemail.log 2>&1

:0:
/var/log/plaform_catchemail

如果“平台”是指 PHP 腳本,則可以使用鎖定文件序列化對其的訪問。

:0c:.catchemail.lock
| php /srv/platform/laravel/artisan platform:catchemail >> /var/log/procmail_catchemail.log 2>&1

這意味着,如果文件.catchemail.lock不存在於您的$MAILDIR中,請提前 go 並創建它,並在本節中保留它。

如果它確實存在,請休眠並重試。

鎖持有時間過長會出現失敗場景; Procmail 在這種情況下的默認行為是退回郵件(即導致投遞 MTA 將其視為無法投遞,並向發件人返回一條錯誤消息)。 您可能想避免這種情況,最好是告訴 MTA 稍后再次嘗試傳送。 (精確的機制將取決於您的 MTA;但基本上,通過設置合適的退出代碼。)但是什么是可行的和可擴展的最終取決於您收到多少消息以及在此約束下您可以處理多少消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM