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?

statussalidas astderr? Intenta agregar2>&1astatus-command. También puedes usarpgrep postfix2>&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).ps aux | grep [p]ostfix?psparece funcionar. En el sistema DSMpsno acepta ningún parámetro que no sea otrow. Pero simplemente llamarps | grep [p]ostfixfunciona.Respuestas:
Debian o Ubuntu
fuente
Para verificar si Postfix se está ejecutando o no:
Para iniciar el Postfix:
Para detener el postfix:
fuente
postfix startsin un mensaje de error, pero cuandopostfix statusescribo dice "el sistema de correo Postfix no se está ejecutando". Supongo que está fallando silenciosamente.Una forma confiable de probar si postfix se está ejecutando:
Una alternativa que esencialmente hace lo mismo:
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 porquepostfixusa elpostlogbinario interno para la salida. El código relevante se puede encontrar en el script bash/var/packages/MailServer/target/libexec/postfix-script:Verificar el código de salida de
postfix statussí funciona bien, por otro lado. El binariopostfix-scriptrealmente llama al detrás de escenapostfixy no se puede llamar directamente. Pero afortunadamente el script también incluye el código para probar si sepostfixestá ejecutando:La variable
$daemon_directoryse establece mediante elpostfixbinario que llama . En mi sistema se resuelve/var/packages/MailServer/target/libexec/.fuente
After doing some more research¿Podrías respaldar tus afirmaciones aportando pruebas?