postfix + procmail - proceso en serie, no en paralelo

postfix + procmail - proceso en serie, no en paralelo

Intentando diseñar un sistema que pueda filtrar los mensajes de correo electrónico entrantes desde un servidor syslog. Es necesario eliminarlos si parecen duplicados (estrangularlos). Procmail los canaliza a un script perl para su procesamiento. Todo eso funciona, excepto que si recibo una avalancha de correos electrónicos todos a la vez, postfix parece generar múltiples instancias del script canalizado. Obviamente, esto es deseable en la mayoría de los casos, pero para este proyecto, tengo que poder procesar los mensajes entrantes uno a la vez para que un campo de la base de datos pueda actualizarse con una marca de tiempo para que los mensajes posteriores que coincidan con un criterio puedan descartarse. de reenviar a los destinatarios. **¿Existe alguna forma de "poner en cola" estos mensajes entrantes para que se procesen uno a la vez, en lugar de hacerlo en paralelo? Gracias.

Respuesta1

Puede utilizar el bloqueo de procmail para hacer que varias instancias ejecuten una instancia del script Perl en un momento dado. ver man procmailrcyman procmailex

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

Por supuesto que hay otras maneras.pero¿Cuántos mensajes por hora espera procesar en las horas pico y promedio?

Respuesta2

Para agregar a la solución de Andrzej, puede establecer un bloqueo para una región más amplia que una sola receta si es necesario con la LOCKFILEvariable 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=

En principio, podría tener varias secciones críticas protegidas por el mismo archivo de bloqueo, aunque me resulta difícil pensar en un escenario en el que esto sea realmente útil.

información relacionada