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 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 result
variá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 postfix
está sendo executada.
Então, minhas perguntas são:
- Como posso obter a saída de
postfix status
dentro de um script bash? - Algo que estou fazendo de errado aí? - Existe uma maneira melhor e confiável de testar se
postfix
está sendo executado dentro de um script bash?
status
saídas parastderr
? Tente adicionar2>&1
aostatus
comando. Também você pode usarpgrep postfix
2>&1
mas o resultado permanece vazio. Infelizmente,pgrep
não existe opção porque não está disponível no sistema (uma estação de disco Synology com DSM 5.1).ps aux | grep [p]ostfix
?ps
parece funcionar. No sistema DSMps
não aceita nenhum parâmetro que não sejaw
. Mas simplesmente ligarps | grep [p]ostfix
funciona.Respostas:
Debian ou Ubuntu
fonte
Para verificar se o Postfix está em execução ou não:
Para iniciar o Postfix:
Para parar o postfix:
fonte
postfix start
sem uma mensagem de erro, mas quando digitopostfix status
aparece "o sistema de correio Postfix não está em execução". Suponho que está silenciosamente falhando.Uma maneira confiável de testar se o postfix está em execução:
Uma alternativa que essencialmente faz o mesmo:
Raciocínio
Depois de fazer mais algumas pesquisas, verificou-se que o teste de
ps | grep [p]ostfix
nã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 status
não produz nada útil é, porquepostfix
usa opostlog
binário interno para a saída. O código relevante pode ser encontrado no script bash/var/packages/MailServer/target/libexec/postfix-script
:Por outro lado, verificar o código de saída de
postfix status
funciona bem. Napostfix-script
verdade, opostfix
binário é chamado nos bastidores e não pode ser chamado diretamente. Mas, felizmente, o script também inclui o código para testar sepostfix
está sendo executado:A variável
$daemon_directory
é configurada pelopostfix
binário de chamada . No meu sistema, ele resolve/var/packages/MailServer/target/libexec/
.fonte
After doing some more research
Você poderia apoiar suas reivindicações fornecendo evidências?