处理邮件一次突发一次

时间:2014-12-08 10:47:14

标签: perl email sendmail procmail

我们收到来自IDS的邮件,我们正在进行后处理以创建事件报告,将它们转发给请求跟踪器等。现在,我们有一个脚本执行procmail根据/中的规则调用的所有后处理etc / aliases中。类似的东西:

ids-report:“| /opt/ids/process.pl”

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

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

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

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

感谢。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

我是第二个Georgi Rangelov's answer,但如果你真的在询问如何在Procmail中一次只运行一条消息,答案就是使用一个锁定文件。

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

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

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

答案 2 :(得分:1)

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

您可以将邮件传递到IMAP邮箱。您可以将fetchmail与--idle(以获得实时处理)和--mda(以执行您的脚本)一起使用。

您可以procmail向maildir发送消息,使用dovecot 即使没有守护程序正在运行,也允许fetchmail使用IMAP协议访问maildir。

P.S。如果您有兴趣,我可以提供更多细节。 AFAIR我用它来处理垃圾邮件服务器捕获的垃圾邮件。