Jak usunąć niepotrzebne maile z kolejki Postfixa
Czasami zaistnieje potrzeba aby wyrzucić mniejszą lub większą ilość maili z kolejki. Dla doświadczonych adminów zwykle nie jest to problem, ale zdecydowałem się, że napiszę kilka użytecznych komend lub skryptów powłoki dla mniej doświadczonych użytkowników.
Oto kilka komend aby wyrzucić maile z kolejki postfixa. Nie pytajcie mnie dlaczego – tak dla przykładu. Tym razem opiszę to krok po kroku. Oto kolejka poczty:
# mailq -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- 571AAC45 48204 Tue Dec 21 07:52:39 MAILER-DAEMON (connect to example.com[221.X.X.70]:25: Connection refused) datadm@example.com ...
Wybierzmy tylko wiadomości od MAILER-DAEMON:
# mailq|grep MAILER-DAEMON
571AAC45 48204 Tue Dec 21 07:52:39 MAILER-DAEMON
5C0671838 4528 Mon Dec 20 15:19:35 MAILER-DAEMON
806BF1FB0 12469 Mon Dec 20 00:38:55 MAILER-DAEMON
2CDC81BDE 47643 Mon Dec 20 12:05:33 MAILER-DAEMON
623E21AFE 4096 Mon Dec 20 13:16:59 MAILER-DAEMON
682491647 11799 Wed Dec 22 06:18:43 MAILER-DAEMON
...
Operacje wykonuje się na Queue-ID, zatem musimy wybrać tylko pierwszą kolumnę:
# mailq|grep MAILER-DAEMON|cut -d" " -f1
571AAC45
5C0671838
806BF1FB0
2CDC81BDE
623E21AFE
682491647
...
Teraz wyślijmy to do polecenia postsuper
:
# mailq|grep MAILER-DAEMON|grep ^5|cut -d" " -f1|postsuper -d -
postsuper: 571AAC45: removed
postsuper: 5C0671838: removed
postsuper: Deleted: 2 messages
Ograniczyłem tu zakres do tych, które zaczynają się od cyfry 5 (grep ^5
), aby móc pokazać, że grep
i cut
może być zastąpione pojedynczą komendą gawk
(GNU awk):
# mailq|gawk '/MAILER-DAEMON/ { print $1 }'|postsuper -d -
postsuper: 806BF1FB0: removed
postsuper: 2CDC81BDE: removed
postsuper: 623E21AFE: removed
postsuper: 682491647: removed
...
Jeśli się zdarzy, że kolejka jest duża i lista argumentów jest zbyt długa, wtedy należy użyć polecenia xargs
przed postsuper
.
# mailq|gawk '/MAILER-DAEMON/ { print $1 }'|xargs|postsuper -d