Debian ou Ubuntu
sudo service postfix status
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:
postfix status
dentro de um script bash? -
Alguma coisa que estou fazendo de errado aí? postfix
está sendo executado dentro de um script bash? Debian ou Ubuntu
sudo service postfix status
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.
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/
.