Postfix + Procmail – seriell verarbeiten, nicht parallel

Postfix + Procmail – seriell verarbeiten, nicht parallel

Ich versuche, ein System zu entwickeln, das eingehende E-Mail-Nachrichten von einem Syslog-Server filtern kann. Wenn es sich um Duplikate zu handeln scheint, müssen sie gelöscht werden (drosseln). Procmail leitet sie zur Verarbeitung an ein Perl-Skript weiter. Das funktioniert alles, außer wenn ich eine Flut von E-Mails auf einmal bekomme. Dann scheint Postfix mehrere Instanzen des weitergeleiteten Skripts zu erzeugen. Natürlich ist das in den meisten Fällen wünschenswert, aber für dieses Projekt muss ich in der Lage sein, die eingehenden Nachrichten einzeln zu verarbeiten, damit ein Datenbankfeld mit einem Zeitstempel aktualisiert werden kann, damit nachfolgende Nachrichten, die einem Kriterium entsprechen, gelöscht und nicht an die Empfänger weitergeleitet werden können. **Gibt es eine Möglichkeit, diese eingehenden Nachrichten in eine „Warteschlange“ zu stellen, damit sie einzeln und nicht parallel verarbeitet werden? Danke.

Antwort1

Sie können die Sperre von procmail verwenden, um mehrere Instanzen gleichzeitig eine Instanz des Perl-Skripts ausführen zu lassen. Siehe man procmailrcundman procmailex

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

Natürlich gibt es auch andere MöglichkeitenAberWie viele Nachrichten werden Sie voraussichtlich in der Spitzen- und Durchschnittsstunde pro Stunde verarbeiten?

Antwort2

Als Ergänzung zur Lösung von Andrzej können Sie bei Bedarf mit der LOCKFILEspeziellen Variable eine Sperre für einen größeren Bereich als nur ein einzelnes Rezept festlegen.

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

Im Prinzip könnten Sie mehrere kritische Abschnitte haben, die durch die gleiche Sperrdatei geschützt werden, mir fällt allerdings kaum ein Szenario ein, in dem dies tatsächlich sinnvoll wäre.

verwandte Informationen