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=

原则上,您可以有多个由同一个锁定文件保护的关键部分,尽管我很难想象这实际上有用的场景。

相关内容