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