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

0

Tentando criar um sistema que possa filtrar as mensagens de e-mail recebidas de um servidor syslog. Precisa cair se eles parecem estar duplicados (estrangule-os). O Procmail os canaliza para um script perl para processamento. Tudo isso 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, tenho que processar as mensagens recebidas uma de cada vez para que um campo de banco de dados possa ser atualizado com um registro de data e hora para que as mensagens subsequentes que correspondem a um critério sejam descartadas. de encaminhados para os destinatários. ** Existe uma maneira de "enfileirar" essas mensagens recebidas para serem processadas uma de cada vez, em vez de em paralelo? Obrigado.

    
por John Hawley 26.05.2017 / 17:54

2 respostas

2

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 procmailrc e man procmailex

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

O curso tem outras formas mas Quantas mensagens por hora você espera processar no horário de pico e na hora média?

    
por 26.05.2017 / 19:32
1

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 variável LOCKFILE special.

# 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ê pode ter várias seções críticas que são protegidas pelo mesmo arquivo de bloqueio, embora eu tenha dificuldade em pensar em um cenário em que isso seria realmente útil.

    
por 26.05.2017 / 20:35