postfix + procmail — обрабатывать последовательно, а не параллельно

postfix + procmail — обрабатывать последовательно, а не параллельно

Пытаюсь разработать систему, которая может фильтровать входящие сообщения электронной почты с сервера syslog. Нужно отбрасывать, если они кажутся дубликатами (регулировать их). Procmail направляет их в скрипт perl для обработки. Все работает, за исключением того, что если я получаю поток писем одновременно, postfix, похоже, порождает несколько экземпляров переданного скрипта. Очевидно, что это желательно в большинстве случаев, но для этого проекта мне нужно иметь возможность обрабатывать входящие сообщения по одному за раз, чтобы поле базы данных можно было обновить с помощью временной метки, чтобы последующие сообщения, соответствующие критериям, можно было отбрасывать, а не пересылать получателям. **Есть ли способ «поставить в очередь» эти входящие сообщения, чтобы они обрабатывались по одному, а не параллельно? Спасибо.

решение1

Вы можете использовать блокировку procmail, чтобы заставить несколько экземпляров выполнять один экземпляр скрипта perl в определенное время. Смотрите man procmailrcиman procmailex

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

Конечно, есть и другие способы.ноСколько сообщений в час вы планируете обрабатывать в часы пик и в среднем часе?

решение2

Чтобы дополнить решение Анджея, вы можете установить блокировку для более широкой области, чем просто для одного рецепта, если вам это необходимо, с помощью 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=

В принципе, можно иметь несколько критических секций, защищенных одним и тем же файлом блокировки, хотя мне сложно представить себе сценарий, в котором это действительно было бы полезно.

Связанный контент