2008-10-22 12 views
9

¿Qué es un buen comando para controlar una instalación de Postfix en un servidor Linux? Debe ser un comando que se puede ejecutar desde un símbolo del sistema en una sesión SSH y devuelve información sobre si el proceso postfix está activo y el tamaño de las colas de correo relevantes.Cómo supervisar el estado del MTA de Postfix

EDITAR

Esto puede no parece ser en tema de desbordamiento de pila (Tal vez mejor para el servidor falla?) Pero se relaciona con el desarrollo de software. En ese momento, estaba creando una aplicación compleja de envío de correo que usaba múltiples MTA para la entrega de correo. Si la cola de correo en un servidor creció demasiado, entonces debería preferir otros MTA menos ocupados. Por lo tanto, la aplicación de control necesitaba una forma de mantener una conexión SSH con cada MTA y monitorear periódicamente su estado.

Si la necesidad de supervisión fue simplemente para fines administrativos, hay muchas herramientas GUI que lo hacen mucho más fácilmente.

Respuesta

17

Usted puede utilizar los programas de línea de comandos que vienen con Postfix:

  • mailq: muestra qué colas tienen correo que es 'procesados' -p
  • postqueue: es lo que en realidad hace referencia a mailq
  • postqueue - f: elimina todas correo en cola, inmediatamente tratando de hacer entregas
  • ps aux: muestra los procesos que se ejecutan en el servidor, buscar cosas como:
    • smtpd
    • proxymap
    • yunque
    • trivial-reescritura
    • qmgr
    • recogida
    • showq

Lo que se encuentra con el comando ps variará dependiendo de cómo se configurar las cosas.

5

En orden de preferencia:

La mejor manera es enviar mensajes de control a través del servidor de correo y supervisar su llegada al destino.

Utilice mailq y qshape (incluido con las distribuciones de postfix recientes) para supervisar las colas.

Puede comprobar que smtpd está escuchando y volviendo una pancarta utilizando netcat (opciones a netcat varían según el sistema operativo, que son para Linux):

 
nc -w 1 localhost 25 </dev/null 

A continuación se informará el número de procesos para cada demonio de Postfix , agrupados por maestro (maestros múltiples si tiene varias instancias de postfix).

ps -e -o pid,ppid,fname | perl -lane ' 
    if ($F[1] != 1) { 
     ++$c{$F[1]}->{$F[2]}; 
    } elsif ($F[2] eq "master") { 
     push(@masters, $F[0]); 
    } 
    END { 
     foreach $master (@masters) { 
      print "=== master: $master ==="; 
      foreach $agent (keys %{$c{$master}}) { 
       printf "\t%-5d %s\n", $c{$master}->{$agent}, $agent; 
      } 
     } 
    } 
' 
5

Además de la respuesta de Bryan Rehbein arriba, aquí es un script que utilizo para controlar las longitudes de cola de sufijo. Todo lo que hace es enviar una alerta por correo electrónico una vez que la cola crece más allá de los mensajes X en tamaño.La alerta se envía utilizando msmtp (una pequeña línea de comandos del cliente de SMTP) por lo que no pasa por la instalación local de sufijo (que no se puede confiar para obtener su alerta a cabo de manera oportuna si sus colas están creciendo ...)

#!/bin/bash 
# 
# Postfix queue length monitoring script (requires msmtp) 
# 
# This script checks the active, incoming, deferred and maildrop postfix queue directories. 
# 
# If the number of messages in any of these directories is more than $MAX_QUEUE_LENGTH, 
# the script will generate an alert email and send it using msmtp. We use msmtp so that 
# we can bypass the local postfix installation (since if the queues are getting big, 
# the alert email may not be sent in time to catch the problem). 
# 

######################################################### 
# SET SCRIPT VARS 
######################################################### 

# Path to msmtp binary (e.g. /usr/bin/msmtp on Debian systems) 
MSMTP=/usr/bin/msmtp 

# Remote mail host (this is the mail server msmtp will use to send the alert. It should NOT be the local postfix installation) 
MAILHOST=backup.mailserver.com 

# Remote mail port 
MAILPORT=25 

# Mail protocol 
MAILPROTO=smtp 

# Fully qualified domain name of local postfix installation 
DOMAIN=primary.mailserver.com 

# From address 
[email protected] 

# Recipient (this address should not route to the local postfix installation, for obvious reasons) 
MAILTO="[email protected]" 

# Email subject 
MAILSUBJECT="Postfix queue length alert for ${DOMAIN}" 

# MSMTP log file 
LOGFILE=/var/log/msmtp.log 

# Root of the postfix queue dirs (e.g. /var/spool/postfix on Debian systems). Note: no trailing slash. 
QUEUEDIR_ROOT="/var/spool/postfix" 

# Max queue length (if there are more messages in a queue than this number, we will send an alert) 
MAX_QUEUE_LENGTH=10 


######################################################### 
# SCRIPT LOGIC STARTS HERE 
######################################################### 

# Check msmtp binary exists 
if [ ! -f ${MSMTP} ] 
then 
     echo "Cannot find ${MSMTP}. Exiting." 
     exit 1 
fi 

# Get the number of messages sitting in each postfix queue directory 
Q_ACTIVE=$(find ${QUEUEDIR_ROOT}/active -type f | wc -l) 
Q_INCOMING=$(find ${QUEUEDIR_ROOT}/incoming -type f | wc -l) 
Q_DEFERRED=$(find ${QUEUEDIR_ROOT}/deferred -type f | wc -l) 
Q_MAILDROP=$(find ${QUEUEDIR_ROOT}/maildrop -type f | wc -l) 

# If any of these queues contain more than $MAX_QUEUE_LENGTH issue an alert 
if [ ${Q_ACTIVE} -gt ${MAX_QUEUE_LENGTH} -o ${Q_INCOMING} -gt ${MAX_QUEUE_LENGTH} -o ${Q_DEFERRED} -gt ${MAX_QUEUE_LENGTH} -o ${Q_MAILDROP} -gt ${MAX_QUEUE_LENGTH} ]; then 

    (
     echo "From: ${MAILFROM} " 
     echo "To: ${MAILTO} " 
     echo "Mime-Version: 1.0" 
     echo 'Content-Type: text/plain; charset="iso-8859-1"' 
     echo "Subject: ${MAILSUBJECT}" 
     echo "" 
     echo "One or more of the postfix queues on ${DOMAIN} has grown beyond ${MAX_QUEUE_LENGTH} messages in length." 
    ) | ${MSMTP} --host=${MAILHOST} --port=${MAILPORT} --protocol=${MAILPROTO} --domain=${DOMAIN} --auth=off --tls=off --from=${MAILFROM} --logfile=${LOGFILE} --syslog=off --read-recipients 

    exit 2 

fi 

exit 0 
+0

también vale la pena mencionar que msmtp soporta TLS/SSL y especificar un nombre de usuario/contraseña. Así, por ejemplo, se podía reajustar ligeramente el guión para enviar mensajes de correo electrónico de alerta a través de una cuenta de Gmail si querías. – corford

Cuestiones relacionadas