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

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

0
31.05.2017, 10:53
2 ответа

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

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

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

1
28.01.2020, 02:33

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

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

1
28.01.2020, 02:33

Теги

Похожие вопросы