Controlando filas do Postfix
De gutocarvalho.net
Aqui vamos ver alguns métodos para controlar as filas de e-mail do MTA Postfix.
[editar] filas
As filas que esta MTA usa para o processamento de mensagens são:
incoming active deferred corrupt hold
Quem faz o gerenciamento da fila é o QMGR (http://www.postfix.org/qmgr.8.html)
Agora vamos entender a finalidade de cada fila.
[editar] incoming
Esta é a fila de e-mails que estâo entrando a partir da rede, repassados pelo maildrop.
[editar] active
Esta é a fila de e-mails que foram abertos pelo gerenciador da fila para entregas. Essa fila tem um numero limite para entrada de mensagens.
[editar] deferred
Esta é a fila de mensagens que não conseguiram ser entregues na primeira tentativa. O gerenciador da fila vai seguir as configurações do main.cf para novas tentativas de entregas. Por padrão ele vai dobrando o tempo de entrega a cada tentativa.
[editar] corrupt
Os arquivos das filas que não conseguem ser lidos ou que estão danificados são movidos para esta fila para uma inspeção.
[editar] hold
Mensagens que são colocadas em espera pelo administrador vão para esta fila até que alguém especifique que ela deva ser liberdada.
[editar] onde ficam os diretórios e arquivos das filas ?
Elas ficam no diretório /var/spool/postfix/
root@mail-pri:/etc/postfix# ls /var/spool/postfix/ -la total 2156 drwxr-xr-x 19 root root 4096 Dec 13 2006 . drwxr-xr-x 12 root root 4096 May 27 08:58 .. drwx------ 2 postfix root 405504 May 28 08:45 active drwx------ 2 postfix root 4096 May 28 08:45 bounce drwx------ 2 postfix root 4096 Mar 26 2006 corrupt drwx------ 18 postfix root 4096 Apr 3 2006 defer drwx------ 18 postfix root 4096 Apr 3 2006 deferred drwxr-xr-x 2 root root 4096 May 27 10:37 etc drwx------ 2 postfix root 4096 May 27 10:13 flush drwx------ 2 postfix root 4096 Mar 26 2006 hold drwx------ 2 postfix root 1691648 May 28 08:45 incoming drwxr-xr-x 2 root root 4096 May 27 10:37 lib drwx-wx--T 2 postfix postdrop 36864 May 28 08:45 maildrop drwxr-xr-x 2 postfix root 4096 May 20 11:37 pid drwx------ 2 postfix root 4096 May 27 10:37 private drwx--s--- 2 postfix postdrop 4096 May 27 10:37 public drwx------ 2 postfix root 4096 Mar 26 2006 saved drwx------ 2 postfix root 4096 Apr 5 2007 trace drwxr-xr-x 3 root root 4096 Mar 26 2006 usr
veja o conteúdo do diretório deferred
root@mail-pri:/etc/postfix# ls /var/spool/postfix/deferred/ 0 1 2 3 4 5 6 7 8 9 A B C D E F
veja o conteúdo dos sub-diretórios em deferred
root@mail-pri:/etc/postfix# ls -la /var/spool/postfix/deferred/0/ total 216 drwx------ 2 postfix postfix 12288 May 28 08:15 . drwx------ 18 postfix root 4096 Apr 3 2006 .. -rwx------ 1 postfix postfix 7648 May 28 08:48 021CF81FC -rwx------ 1 postfix postfix 119423 May 28 2008 05AE380DC -rwx------ 1 postfix postfix 30256 May 28 2008 05FA581C3 -rwx------ 1 postfix postfix 5002 May 28 2008 097EE80AD -rwx------ 1 postfix postfix 4578 May 28 2008 0CBB081B8 -rwx------ 1 postfix postfix 18921 May 28 08:48 0FB458081
verificando o tipo de arquivo
root@mail-pri:/etc/postfix# file /var/spool/postfix/deferred/0/021CF81FC /var/spool/postfix/deferred/0/021CF81FC: data
[editar] controlando a fila com o comando postqueue
Vamos aprender a gerenciar a fila com o postqueue (http://www.postfix.org/postqueue.1.html)
[editar] postqueue -p
para verificar como está sua fila use o comando
postqueue -p
[editar] postqueue -f
para dar um flush na fila e enviar mensagens que estão aguardando (deferred) use o comando
postqueue -f
[editar] postqueue -i
para iniciar a entrega imediata de uma mensagem na fila deferred
postqueue -i message_id
postqueue -i F2AF0111029
como obter o message id?
posqueue -p|grep endereco@dominio.com.br
F2AF0111029 5514 Wed May 28 07:58:02 nome@dominio
[editar] postqueue -s
para iniciar a entrega imediata de mensagens na fila para um domínio especifico
postqueue -s mda.gov.br
[editar] controlando fila com o comando postsuper
Vamos aprender a gerenciar a fila com o postsuper (http://www.postfix.org/postsuper.1.html)
[editar] postsuper -h
Colocando mensagem em HOLD (espera).
postsuper -h queue_id
[editar] postsuper -H
Libera mensagem colocada em HOLD
postsuper -H queue_id
[editar] postsuper -d
remove mensagem das filas
postsuper -d queue_id
remove todas as mensagens da fila
postsuper -d ALL
[editar] postsuper -p
Faz um purge na nos arquivos temporarios da fila que podem ser sobras de um crash no sistema ou no postfix.
postsuper -p
[editar] postsuper -s
Verifica a estrutura das filas e repara a fila caso exista algum problema.
postsuper -s
[editar] postsuper -r
Recoloca a mensagem na fila, geralmente usamos quando queremos pegar uma mensagem e enviar imediatamente.
postqueue -r queue_id
Se você quiser fazer isto com várias mensagens, coloque-as em um arquivo, uma em baixo da outra e faça o seguinte
cat queueid_list.txt | postqueue -r -
[editar] visualizando a fila com o comando qshape
O Qshape é uma ferramenta de análise estatística do postfix, vamos aprender a usá-lo.
[editar] visualizando fila active
qshape active
qshape active|head
[editar] visualizando fila deferred
qshape deferred
qshape deferred|head
[editar] visualizando fila incoming
qshape incoming
qshape incoming|head
[editar] visualizando fila hold
qshape hold
qshape hold|head
tem vários outras formas de usar o qshape mas a documentação dele é bem clara ;)
[editar] exemplo de saída do qshape
# qshape incoming active
T 5 10 20 40 80 160 320 640 1280 1280+
TOTAL 655 60 111 0 43 0 7 6 120 150 158
mopar.ops.gov.br 151 40 111 0 0 0 0 0 0 0 0
ops.gov.br 109 0 0 0 0 0 0 0 0 50 59
correioweb.com.br 55 0 0 0 0 0 0 0 55 0 0
ops.gov.br 35 0 0 0 0 0 0 0 0 14 21
uai.com.br 31 0 0 0 4 0 0 0 27 0 0
serv-ops-2.ops.gov.br 20 20 0 0 0 0 0 0 0 0 0
uol.com.br 19 0 0 0 19 0 0 0 0 0 0
acritica.com.br 14 0 0 0 1 0 0 6 4 0 3
redesat-to.com.br 10 0 0 0 1 0 1 0 4 0 4
alterosa.com.br 7 0 0 0 1 0 0 0 6 0 0
hotamil.com 6 0 0 0 1 0 0 0 2 0 3
ibahia.com 5 0 0 0 0 0 0 0 1 2 2
consultor.ops.gov.br 5 0 0 0 0 0 0 0 0 2 3
inatel.com.br 4 0 0 0 0 0 0 0 2 0 2
estagio.ops.gov.br 4 0 0 0 0 0 0 0 0 1 3
ojc.com.br 3 0 0 0 0 0 0 0 2 0 1
umc.com.br 3 0 0 0 0 0 0 0 0 0 3
oesp.com.br 3 0 0 0 0 0 0 0 1 0 2
tvcaju.com.br 3 0 0 0 0 0 1 0 0 0 2
[editar] contando mensagens das filas usando o find
vamos criar um arquivo chamado contafilas
# vim /etc/postfix/contafilas
coloque o conteúdo abaixo
#!/bin/sh
# autor: gutocarvalho (guto@gutocarvalho.net)
# data de criacao: 2008-05-28
# baseado nos scripts do queuegraph
# uso: ./contafilas
# variaveis
qdir=`/usr/sbin/postconf -h queue_directory`
incoming=`/usr/bin/find $qdir/incoming -type f -print | wc -l | awk '{print $1}'`
maildrop=`/usr/bin/find $qdir/maildrop -type f -print | wc -l | awk '{print $1}'`
active=`/usr/bin/find $qdir/active -type f -print | wc -l | awk '{print $1}'`
deferred=`/usr/bin/find $qdir/deferred -type f -print | wc -l | awk '{print $1}'`
hold=`/usr/bin/find $qdir/hold -type f -print | wc -l | awk '{print $1}'`
corrupt=`/usr/bin/find $qdir/corrupt -type f -print | wc -l | awk '{print $1}'`
# imprimindo informacoes
echo -e "\nE-mails chegando (incoming queue): $incoming"
echo "E-mails sendo processados (maildrop): $maildrop"
echo "E-mails na fila para entrega (active queue): $active"
echo "E-mails que nao foram entregues (deferred queue): $deferred"
echo -e "E-mails com problemas (corrupt queue): $corrupt\n"
o script original do queuegraph soma incoming + active + maildrop para falar a quantidade de e-mails ativos, deixando apenas a variável active, eu preferi modificar, mas se quiser usar como era originalmente, apague a variável incoming e maildrop e deixe apenas a variável active como abaixo:
active=`/usr/bin/find $qdir/active $qdir/maildrop $qdir/incoming -type f -print | wc -l | awk '{print $1}'`
agora ajuste as permissões
# chmod 700 contafilas
para usar
# ./contafilas
saída do comando
E-mails chegando: 1 E-mails sendo processados: 0 E-mails na fila para entrega local: 2 E-mails que nao conseguiram ser entregues local/remoto: 156 E-mails com problemas: 0
pronto ;)
[editar] contando mensagens das filas usando o qshape
Este script vai usar o qshape para contar as filas INCOMING, ACTIVE, DEFFERD e HOLD
vamos criar o arquivos
# vim contafilas-qshape
coloque o conteúdo do arquivos
#!/bin/bash
#getmailq.sh - written by Valec 2006. Steal and share.
#Get postfix queue lengths
#Place in /usr/local/bin/
#exec .1.3.6.1.4.1.2021.53.101.0 mailq /usr/local/bin/getmailq.sh
QUEUES="incoming active deferred hold corrupt"
for i in $QUEUES; do
COUNT=`qshape $i | grep TOTAL | awk '{print $2}'`
printf "$i:$COUNT "
done
ajustando permissões
chmod 700 contafilas-qshape
rodando o script
# ./contafilas-qshape
saída do comando
incoming:0 active:2 deferred:187 hold:0 corrupt:0
pronto ;)
[editar] delivery status reports
Aproveitando o ensejo vamos falar sobre os estados das mesagens, é importante saber que o gerenciador de fila QMGR mantem um arquivo com o mesmo nome da fila em outros diretórios com informações sobre o estado daquela mensagem.
Os estados são:
bounce defer trace
Vamos agora entender o que cada estado significa.
[editar] bounce
Informação sobre os motivos da mensagem ter recebido um bounce (mensagem de erro).
Estas informações são gerenciadas pelo BOUNCE DAEMON.
[editar] defer
Informação sobre os motivos da mensagem estar com o envio atrasado.
Estas informações são gerenciadas pelo DEFER DAEMON.
[editar] trace
Informação sobre requisições com o comando sendmail -v ou sendmail -bv do MTA postfix.
Estas informações são gerenciadas pelo TRACE DAEMON.
;)
[editar] recomendo leitura
- http://www.unitednerds.org/thefallen/docs/index.php?area=Postfix&tuto=Palestra-LinuxChix-2004
- http://www.postfix.org/qmgr.8.html

