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
実行することです。
PS:findコマンドは「不必要に」複雑で、キュー内のすべてのディレクトリを列挙する必要があります。これは/var/spool/postfix
chroot(少なくともDebianでは)に設定され、そのサブツリー領域の下にbinaryes / libs / dev / configファイルがあるためです。