postfix + procmail - 병렬 처리가 아닌 직렬 처리

postfix + procmail - 병렬 처리가 아닌 직렬 처리

syslog 서버에서 들어오는 이메일을 필터링할 수 있는 시스템을 설계해 보십시오. 중복된 것으로 보이면 제거해야 합니다(제한적). Procmail은 처리를 위해 이를 Perl 스크립트에 전달합니다. 한 번에 많은 이메일을 받고 Postfix가 파이프라인 스크립트의 여러 인스턴스를 생성하는 것처럼 보이는 경우를 제외하고는 이 모든 것이 작동합니다. 분명히 이는 대부분의 경우에 바람직하지만 이 프로젝트에서는 데이터베이스 필드를 타임스탬프로 업데이트하여 기준과 일치하는 후속 메시지를 제거하고 다음으로 전달할 수 있도록 한 번에 하나의 수신 메시지를 처리할 수 있어야 합니다. 받는 사람 . **이러한 수신 메시지를 병렬이 아닌 한 번에 하나씩 처리하도록 "큐에 추가"하는 방법이 있습니까? 감사해요.

답변1

procmail의 잠금을 사용하면 주어진 시간에 Perl 스크립트의 여러 인스턴스가 실행되도록 할 수 있습니다. 참조 man procmailrcman procmailex

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

물론 다른 방법도 있어요하지만사용량이 가장 많은 시간대와 평균 시간대에 시간당 몇 개의 메시지를 처리할 것으로 예상하시나요?

답변2

Andrzej의 솔루션에 추가하려면 특수 변수를 사용해야 하는 경우 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=

원칙적으로 동일한 잠금 파일로 보호되는 여러 중요 섹션을 가질 수 있지만 이것이 실제로 유용한 시나리오를 상상하기는 어렵습니다.

관련 정보