postsuper -d ALL
ポストキューに残っているすべてのメールを、再度送信せずに削除します。
しかし、このコマンドを呼び出すと、ファイルシステムで正確に何が起こっていますか?
Postfixを含むメールシステムのスナップショットがあります。スナップショットを実行したいが、ポストキューから残りのメールを送信したくない。
実行中のサーバーとして起動する前に、ローカルにマウントされたVMイメージのpostqueueを手動で空にしたいと思います。最も簡単な方法は、postqueue内のすべてのファイルを削除することです。そのため、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
TLDR postsuper -d ALL
コマンドは、/var/spool/postfix/
の下のpostfixキューイングディレクトリにある、キューに入れられたすべてのメッセージファイルを削除します。
長い答え:
例として、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
実際には、訪問したディレクトリをコマンドで監視し、ファイルシステムでは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
serviceを起動して実行する必要はありません。ファイルを直接削除する1つの方法は、サーバーをシングルモードで起動するか、Postfixサービスを実行せずにpostsuper -d ALL
にジョブを実行させることです。
PS /var/spool/postfix
がchroot(少なくともDebianでは)としてセットアップされており、そのサブツリー領域の下にバイナリ/ライブラリ/ dev /設定ファイルがあるため、findコマンドはすべてのキューディレクトリを列挙する必要があり、「不必要に」複雑です。 。