Teste se o postfix está em execução


8

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

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

Então eu 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 mesmo que o status seja relatado ao console, a resultvariável 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

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

pidof master

Mas isso não é muito detalhado e não tenho certeza se essa é uma maneira confiável de testar se postfixestá sendo executada.

Então, minhas perguntas são:

  • Como posso obter a saída de postfix statusdentro de um script bash? - Algo que estou fazendo de errado aí?
  • Existe uma maneira melhor e confiável de testar se postfixestá sendo executado dentro de um script bash?

1
Possíveis statussaídas para stderr? Tente adicionar 2>&1ao statuscomando. Também você pode usarpgrep postfix
Costas

Eu tentei, 2>&1mas o resultado permanece vazio. Infelizmente, pgrepnão existe opção porque não está disponível no sistema (uma estação de disco Synology com DSM 5.1).
Balder


1
ps aux | grep [p]ostfix?
Costas

Obrigado @Costas e @garethTheRed - o uso psparece funcionar. No sistema DSM psnão aceita nenhum parâmetro que não seja w. Mas simplesmente ligar ps | grep [p]ostfixfunciona.
Balder

Respostas:



4

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

1
Posso digitar postfix startsem uma mensagem de erro, mas quando digito postfix statusaparece "o sistema de correio Postfix não está em execução". Suponho que está silenciosamente falhando.
PJ Brunet

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, verificou-se que o teste de ps | grep [p]ostfixnão é confiável para verificar se o postfix está em execução.

Parece que a razão pela qual /var/packages/MailServer/target/sbin/postfix statusnão produz nada útil é, porque postfixusa o postlogbinário 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, verificar o código de saída de postfix statusfunciona bem. Na postfix-scriptverdade, o postfixbinário é chamado nos bastidores e não pode ser chamado diretamente. Mas, felizmente, o script também inclui o código para testar se postfixestá sendo executado:

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é configurada pelo postfixbinário de chamada . No meu sistema, ele resolve /var/packages/MailServer/target/libexec/.


After doing some more research Você poderia apoiar suas reivindicações fornecendo evidências?
toogley
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.