Teste se o postfix está sendo executado

7

Estou procurando uma maneira confiável de testar se postfix está sendo executado dentro de um script bash.

Minha primeira tentativa foi simplesmente tentar pidof postfix , o que não funciona.

Então tentei obter o 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

Mas, embora o status seja relatado para o console, a variável result permanece vazia. Esta é a saída do console:

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

Eu finalmente encontrei uma maneira de testar se o postfix está sendo executado, obtendo o nome do processo de PID: 11996 , que é "master". Então, o seguinte faz funcionar:

pidof master

Mas isso não é muito detalhado e não tenho certeza se essa é uma maneira confiável de testar se postfix está em execução.

Então, minhas perguntas são:

  • Como posso obter a saída de postfix status dentro de um script bash? - Alguma coisa que estou fazendo de errado aí?
  • Existe uma maneira confiável melhor para testar se postfix está sendo executado dentro de um script bash?
por Balder 28.02.2015 / 08:46

3 respostas

7

Debian ou Ubuntu

sudo service postfix status
    
por 10.09.2015 / 01:13
3

Para verificar se o Postfix está em execução ou não:

sudo /etc/init.d/postfix status

Para iniciar o postfix:

sudo /etc/init.d/postfix start

Para parar o postfix:

sudo /etc/init.d/postfix stop

Espero que isso ajude.

    
por 21.09.2016 / 06:40
1

Uma maneira confiável de testar se o postfix está em execução:

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

Uma alternativa que essencialmente faz o mesmo:

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

Raciocínio

Depois de fazer mais algumas pesquisas, descobriu-se que o teste de ps | grep [p]ostfix não é confiável para verificar se o postfix está sendo executado.

Parece que a razão pela qual /var/packages/MailServer/target/sbin/postfix status não produz nada útil é porque postfix usa o binário postlog interno para a saída. O código relevante pode ser encontrado no script bash /var/packages/MailServer/target/libexec/postfix-script :

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

Por outro lado, a verificação do código de saída de postfix status funciona bem. O postfix-script é realmente chamado nos bastidores pelo binário postfix e não pode ser chamado diretamente. Mas, felizmente, o script também inclui o código para testar se postfix está em execução:

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
    ;;

A variável $daemon_directory é definida pelo chamado postfix binário. No meu sistema, ele resolve para /var/packages/MailServer/target/libexec/ .

    
por 01.03.2015 / 12:50