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=

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

관련 정보