postsuper -d ALL
여전히 백 큐에 있는 모든 메시지는 삭제되고 더 이상 전송되지 않습니다.
하지만 이 명령을 호출하면 파일 시스템에서는 정확히 어떤 일이 발생할까요?
Postfix가 포함된 메일 시스템의 스냅샷이 있습니다. 이제 스냅샷을 실행하고 싶지만 백 대기열의 나머지 이메일을 보내고 싶지 않습니다.
실행 중인 서버로 시작하기 전에 로컬로 마운트된 가상 머신 이미지의 백큐를 수동으로 지우고 싶습니다. 가장 간단한 방법은 대기열의 모든 파일을 삭제하는 것입니다. 그러면 postsuper -d ALL
정확히 어떤 작업을 수행합니까?
업데이트:
보다 정교한 해결책은 설치된 시스템으로 chroot하는 것입니다.
mkdir /media/tmp/
mount /dev/vg0/vm01.tmp-disk-snapshot /media/tmp/
mount -t proc none /media/tmp/proc
mount --bind /dev /media/tmp/dev
mount -t sysfs sysfs /media/tmp/sys
chroot /media/tmp/ /bin/bash
테스트 VM이 메일을 보내지 않고 종료되도록 게시 대기열을 지웁니다.
postsuper -d ALL
exit
답변1
TLDR 이 postsuper -d ALL
명령은 postfix 대기열 디렉터리에 있는 대기열에 있는 모든 메시지 파일을 삭제합니다 /var/spool/postfix/
.
긴 답변:
예를 들어, 접미사 대기열에는 3개의 메시지가 있습니다.
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
8EDC660C92* 400 Sun May 10 13:42:22 [email protected]
[email protected]
7334B60C89 395 Sun May 10 13:37:59 [email protected]
(connect to mx.ptmail.sapo.pt[212.55.154.36]:25: Connection timed out)
[email protected]
4BD3A60C8D 407 Sun May 10 13:38:18 [email protected]
(connect to alt4.gmail-smtp-in.l.google.com[74.125.28.26]:25: Connection timed out)
[email protected]
-- 1 Kbytes in 3 Requests.
삭제된 파일 모니터링 sudo postsuper -d ALL
:
30305 13:42:28.160381720 0 postsuper (1091) < unlink res=0 path=defer/7/7334B60C89(/var/spool/postfix/defer/7/7334B60C89)
30329 13:42:28.160423699 0 postsuper (1091) < unlink res=0 path=defer/4/4BD3A60C8D(/var/spool/postfix/defer/4/4BD3A60C8D)
30379 13:42:28.160481785 0 postsuper (1091) < unlink res=0 path=active/8EDC660C92(/var/spool/postfix/active/8EDC660C92)
30419 13:42:28.160537670 0 postsuper (1091) < unlink res=0 path=deferred/7/7334B60C89(/var/spool/postfix/deferred/7/7334B60C89)
30443 13:42:28.160574946 0 postsuper (1091) < unlink res=0 path=deferred/4/4BD3A60C8D(/var/spool/postfix/deferred/4/4BD3A60C8D)
사실, 방금 소스 코드에서 postsuper
-v(verbose) 옵션이 파일 작업을 표시한다는 사실을 발견했습니다.
따라서 postfix -vd ALL
위 대기열의 경우 실행 출력은 다음과 같습니다.
postsuper: name_mask: all
postsuper: inet_addr_local: configured 2 IPv4 addresses
postsuper: queue: defer
postsuper: removed file defer/7/7334B60C89
postsuper: removed file defer/4/4BD3A60C8D
postsuper: queue: bounce
postsuper: queue: maildrop
postsuper: queue: incoming
postsuper: queue: active
postsuper: removed file active/8EDC660C92
postsuper: queue: deferred
postsuper: removed file deferred/7/7334B60C89
postsuper: removed file deferred/4/4BD3A60C8D
postsuper: queue: hold
postsuper: queue: flush
실제로 명령을 통해 액세스되는 디렉터리를 모니터링하려면 파일 시스템의 경우 a는 다음 postfix -d ALL
과 같습니다.
sudo find /var/spool/postfix/{defer,bounce,maildrop,incoming,active,deferred,hold,flush} -type f -exec rm {} \;
마운트된 파일 시스템의 예제 사례에 적용되는 최종 명령은 다음과 같습니다.
sudo find /media/tmp/var/spool/postfix/{defer,bounce,maildrop,incoming,active,deferred,hold,flush} -type f -exec rm {} \;
그럼에도 불구하고 디렉터리와 파일, 즉 파일 시스템에서 직접 작동하므로 대기열을 지우기 위해 서비스를 가동하고 실행할 postsuper -d ALL
필요가 없습니다 . postfix
파일을 직접 삭제하는 대신 단일 모드에서 서버를 시작하거나 postfix 서비스를 실행하지 않고 서버를 시작하여 해당 postsuper -d ALL
작업을 수행하도록 하는 것입니다.
추신: find 명령은 "불필요하게" 복잡하고 대기열에 있는 모든 디렉터리를 열거해야 합니다. 그 이유는 /var/spool/postfix
chroot(적어도 Debian에서는)로 설정되고 해당 하위 트리 영역 아래에 binaries/libs/dev/config 파일이 있기 때문입니다.