postfix + procmail – processa serialmente, não em paralelo

postfix + procmail – processa serialmente, não em paralelo

Tentando projetar um sistema que possa filtrar mensagens de email recebidas de um servidor syslog. Precisa ser descartado se parecerem duplicados (restringi-los). O Procmail os direciona para um script Perl para processamento. Tudo está funcionando, exceto se eu receber uma enxurrada de e-mails de uma só vez, o postfix parece gerar várias instâncias do script canalizado. Obviamente, isso é desejável na maioria dos casos, mas para este projeto, preciso ser capaz de processar as mensagens recebidas, uma de cada vez, para que um campo do banco de dados possa ser atualizado com um carimbo de data e hora, para que as mensagens subsequentes que correspondam a um critério possam ser descartadas. de encaminhado aos destinatários. **Existe uma maneira de "enfileirar" essas mensagens recebidas para serem processadas uma de cada vez, em vez de em paralelo? Obrigado.

Responder1

Você pode usar o bloqueio do procmail para fazer com que várias instâncias executem uma instância do script perl em um determinado momento. Veja man procmailrceman procmailex

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

Claro que existem outras maneirasmasQuantas mensagens por hora você espera processar nos horários de pico e médio?

Responder2

Para adicionar à solução de Andrzej, você pode definir um bloqueio para uma região mais ampla do que apenas uma única receita, se necessário, com a LOCKFILEvariável especial.

# 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=

Em princípio, você poderia ter várias seções críticas protegidas pelo mesmo arquivo de bloqueio, embora eu tenha dificuldade em pensar em um cenário em que isso seria realmente útil.

informação relacionada