Réglage de problèmes

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Postfix c'est bien, ca tien super bien la charge, mais quand il faut débugger pourquoi il y a des problèmes de mails, c'est déjà moins simple. C'est pourquoi, je vais noter ici toutes les astuces que j'ai trouvé.

2 Les solutions

2.1 Vérifier la configuration

Dans Postfix, il n'est pas toujours évident de trouver le problème, c'est pourquoi ils ont été sympas d'intégrer une commande qui va lancer des checks :

Command postfix
postfix check

2.2 Engorgement du spool des mails

Si vous vous retrouver dans le cas ou vous avez un problème d'engorgement de mails (ex: 30000 mails dans la queue), vous pouvez savoir combien il y en a avec la commande suivante :

Command mailq
mailq

Mais si il faut les effacer un à un, c'est un peu galère. C'est pourquoi bibi a concocté un petit script pour supprimer la queue entière :

Configuration File queue_flush_users.pl
#!/usr/bin/perl
# Mailq flusher
# Made by Pierre Mavro
 
use strict;
 
# Vars
my $queue_id;
my @queue_ids;
my @mails_addresses;
my $postsuper_command;
my $found_body=0;
 
# Starting
die "Sorry but you need to give an email address in argument :\n\teg. ./queue_flush_users.pl <viewall|test|delete> <user_mail>\n" if (! defined($ARGV[0]));
 
# Read the Postfix mailq
open MAIL_QUEUE, "mailq |";
 
# Put in arrays mails addresses and queue ids
while (<MAIL_QUEUE>) {
        my $mail_address;
        chomp $_; 
        if ($_ =~ /\s+(.+)\@(.+)/i) {
                $mail_address="$1\@$2";
        }
        if ($_ =~ /^(\w+|\w+\*).+:\d+\s+(.+)\@(.+)/i) {
                $queue_id=$1;
                $mail_address="$2\@$3";
        }
        if (defined($mail_address)) {
                push @queue_ids, $queue_id;
                push @mails_addresses, $mail_address;
        }
}
close(MAIL_QUEUE);
 
my $total_mails=@mails_addresses;
 
for (0..$total_mails) {
        if ($ARGV[1] eq $mails_addresses[$_]) {
                if ($ARGV[0] eq "test") {
                        print "$queue_ids[$_] : $mails_addresses[$_]\n";
                } elsif ($ARGV[0] eq "delete") {
                        $postsuper_command=`postsuper -d $queue_ids[$_]`;
                }
                $found_body++;
        } elsif ($ARGV[0] eq "viewall") {
                print "$queue_ids[$_] : $mails_addresses[$_]\n";
                $found_body++;
        }
}
 
die "Sorry but nobody has been found.\n" if ($found_body == 0)

Ce script vous permet de choisis un utilisateur et de supprimer tous les mails ou il fait parti.

2.3 pflogsumm

pflogsumm permet d'obtenir des infos par rapport aux mails, tout un tas de statistiques comme qui recois beaucoup de mails, qui en envoie beaucoup etc.... Pour obtenir les logs e la journée :

Command pflogsumm
pflogsumm -d today /var/log/mail.log

Obtenir les statistiques de la veille :

Command pflogsumm
pflogsumm -d yesterday /var/log/mail.log.0

Sut le fichier de log en cours :

Command pflogsumm
pflogsumm /var/log/mail.log

Attention :

Command pflogsumm
pflogsumm /var/log/mail.log.0

ne donnera pas les statistiques que de la veille.

2.4 qshape

Toujours pour l'analyse de goulets d'étranglements, vous pouvez utiliser la commande qshape :

Command qshape
qshape -s hold 

Pour plus d'infos :
http://postfix.traduc.org/index.php/QSHAPE_README.html

2.5 fatal: open database /etc/aliases.db: No such file or directory

Il faut simplement regénérer la base d'alias. La commande "newaliases" suffira. Mais sur Solaris, et visiblement les vieilles versions de Postfix, il faudra arréter et démarrer le service en plus :

Command
svcadm disable svc:/network/smtp/postfix:default ; newaliases ; postalias ; svcadm enable svc:/network/smtp/postfix:default

2.6 exec failed. errno=2.

Sur Solaris, lorsqu'on essaye d'envoyer avec la commande mail un message et que ça ne fonctionne pas, que l'on a comme erreur ceci :

exec failed. errno=2.

Il suffit de faire un lien symbolique :

Command ln
ln -s /opt/csw/sbin/sendmail /usr/lib

3 Ressources