Prueba si postfix se está ejecutando


8

Estoy buscando una forma confiable de probar si se postfixestá ejecutando desde un script bash.

Mi primer intento fue simplemente intentarlo pidof postfix, lo que no funciona.

Entonces traté de obtener el postfix status:

POSTFIX_LOCATION=/var/packages/MailServer/target/sbin/postfix # location of postfix
result=`$POSTFIX_LOCATION status`
if [ -z $result ]; then
    echo "Error: No status output from postfix"
elif [[ "$result" == *"is running"* ]]; then
    echo "postfix is running!"
else echo "postfix is not running!"
fi

Pero a pesar de que el estado se informa a la consola, la resultvariable permanece vacía. Esta es la salida de la consola:

postfix/postfix-script: the Postfix mail system is running: PID: 11996
Error: No status output from postfix

Finalmente encontré una forma de probar si postfix se está ejecutando obteniendo el nombre del proceso PID: 11996, que es "maestro". Por lo que el siguiente hace el trabajo:

pidof master

Pero esto no es muy detallado y no estoy seguro de si es una forma confiable de probar si se postfixestá ejecutando.

Entonces mis preguntas son:

  • ¿Cómo puedo obtener la salida postfix statusdesde dentro de un script bash? - ¿Hay algo que esté haciendo mal allí?
  • ¿Hay alguna forma mejor y confiable de probar si se postfixestá ejecutando desde un script bash?

1
Posibles statussalidas a stderr? Intenta agregar 2>&1a status-command. También puedes usarpgrep postfix
Costas

Lo intenté 2>&1pero el resultado permanece vacío. Lamentablemente, pgrepno hay opción porque no está disponible en el sistema (una estación de disco Synology con DSM 5.1).
Balder


1
ps aux | grep [p]ostfix?
Costas

Gracias @Costas y @garethTheRed: el uso psparece funcionar. En el sistema DSM psno acepta ningún parámetro que no sea otro w. Pero simplemente llamar ps | grep [p]ostfixfunciona.
Balder

Respuestas:



4

Para verificar si Postfix se está ejecutando o no:

sudo /etc/init.d/postfix status

Para iniciar el Postfix:

sudo /etc/init.d/postfix start

Para detener el postfix:

sudo /etc/init.d/postfix stop

1
Puedo escribir postfix startsin un mensaje de error, pero cuando postfix statusescribo dice "el sistema de correo Postfix no se está ejecutando". Supongo que está fallando silenciosamente.
PJ Brunet

1

Una forma confiable de probar si postfix se está ejecutando:

if /var/packages/MailServer/target/sbin/postfix status; then
    echo "postfix is running!"
else echo "postfix is not running!"
fi

Una alternativa que esencialmente hace lo mismo:

if /var/packages/MailServer/target/libexec/master -t 2>/dev/null; then
    echo "postfix is not running!"
else echo "postfix is running!"
fi

Razonamiento

Después de investigar un poco más, resultó que las pruebas ps | grep [p]ostfixno son confiables para verificar si postfix se está ejecutando.

Parece que la razón por la /var/packages/MailServer/target/sbin/postfix statusque no genera nada útil es porque postfixusa el postlogbinario interno para la salida. El código relevante se puede encontrar en el script bash /var/packages/MailServer/target/libexec/postfix-script:

LOGGER="$command_directory/postlog -t $MAIL_LOGTAG/postfix-script"
INFO="$LOGGER -p info"

Verificar el código de salida de postfix statussí funciona bien, por otro lado. El binario postfix-scriptrealmente llama al detrás de escena postfixy no se puede llamar directamente. Pero afortunadamente el script también incluye el código para probar si se postfixestá ejecutando:

status)
    $daemon_directory/master -t 2>/dev/null && {
        $INFO the Postfix mail system is not running
        exit 1
    }
    $INFO the Postfix mail system is running: PID: `sed 1q pid/master.pid`
    exit 0
    ;;

La variable $daemon_directoryse establece mediante el postfixbinario que llama . En mi sistema se resuelve /var/packages/MailServer/target/libexec/.


After doing some more research ¿Podrías respaldar tus afirmaciones aportando pruebas?
toogley
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.