2

我们从 IDS 收到大量邮件,我们正在对这些邮件进行后处理以创建事件报告、将它们转发到请求跟踪器等。现在,我们有一个脚本可以根据 /etc/aliases 中的规则执行 procmail 调用的所有后处理. 就像是:

ids 报告:“|/opt/ids/process.pl”

现在,问题是由于邮件突发而运行此脚本的许多实例可能会导致内存耗尽和一些同步问题。

在我的脚本中,我尝试使用Sys::RunAlone,但发现它不是最理想的。

我希望 procmail 一次从队列中为我的脚本提供一封邮件,但我还没有找到一种方法来做到这一点。

你们有什么想法,我该怎么办?开箱即用的解决方案也受到欢迎......

谢谢。

4

3 回答 3

4

为什么不在收到邮件后立即将每封邮件保存到文件或数据库中,并从另一个脚本一次处理一个保存的记录?

如果您发布一些代码,您可能会收到更多(并且可能更好)的答案:)

于 2014-12-08T13:54:25.817 回答
2

我支持Georgi Rangelov 的回答,但如果您认真询问如何在 Procmail 中一次只运行一条消息,答案是使用锁定文件。

:0:only1.lock
| /opt/ids/process.pl

这意味着,如果文件only1.lock存在,请等待。一旦它消失了,创建它,运行管道,然后在完成后删除锁定文件。

另见http://porkmail.org/era/procmail/mini-faq.html#locking

于 2014-12-09T08:32:58.010 回答
1

“IMAP with idle”邮箱作为电子邮件消息的缓冲区/管道

您可以将消息传递到 IMAP 邮箱。您可以使用fetchmail--idle(获取实时处理)和 --mda(执行脚本)。

即使没有运行守护程序以允许使用 IMAP 协议访问 maildir ,您也可以procmail将消息传递到 maildir 。dovecot fetchmail

PS如果您有兴趣,我可能会提供更多详细信息。AFAIR 我曾经用它来处理我的垃圾邮件陷阱服务器捕获的垃圾邮件。

于 2014-12-09T00:19:34.003 回答