Script Bash para enviar um email em uma única linha de comando

2

Eu escrevo um script bash para enviar um email quando a conexão do host local é recusada e quando a conexão é aberta, ele não deve escrever um email. Por exemplo:

netcat -z localhost 8287
if [ $? -ne 0 ]; then
  echo " Connection refused" |/usr/lib/sendmail -s "Port  doesn't function "  [email protected]
else
  echo "open"
fi

Quando eu disparo este script, não funciona. Eu substituí o sendmail pelo correio, envioEmail também, mas toda vez estou recebendo erros diferentes.

    
por M. Thakur 30.11.2016 / 11:10

2 respostas

2

Os seguintes itens funcionam nos meus sistemas:

if ! nc -z $host $port; then
    echo "This message intentionally left blank" | mail -s "TCP port $port is not open on $host" $emailaddress
else
    : Do whatever you wanted to do
fi

Se não aparecer no seu, execute tail -f /var/log/maillog enquanto você executa o script para ver por que a mensagem pode não estar sendo entregue.

    
por 30.11.2016 / 17:27
0

Tente:

/usr/lib/sendmail -oi -t << EOF
Subject: Port doesn't function
To: [email protected]

Connection refused
EOF

O que deve ser razoavelmente portátil (contanto que sendmail seja encontrado em /usr/lib , convém experimentar alguns outros locais como /usr/sbin ou apenas usar sendmail para uma pesquisa $PATH se não for lá).

-oi é para não considerar um "." em uma única linha como um terminador (não é necessário aqui, mas útil no caso geral).

Em sistemas compatíveis com POSIX, você também deve poder usar mailx :

echo Connection refused | mailx -s "Port doesn't function" [email protected]

Todos esses assumem que o sistema possui um agente de transferência de e-mail configurado adequadamente.

    
por 30.11.2016 / 17:43