Eu tenho o seguinte comando abaixo como parte de um cronjob. Quando executo o comando via cron ou na linha de comando, recebo Null message body; hope that's ok
.
O conteúdo do e-mail está vazio, mas quando verifico o /tmp/sdplogs.out
arquivo ele contém conteúdo.
O script /dproxy/scripts/cleanSDP2xLogs.sh
envia a saída para o arquivo /tmp/sdplogs.out
.
O que estou fazendo de errado? Qualquer ajuda seria muito apreciada.
$ /dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Null message body; hope that's ok
Responder1
Você precisa substituir |
por &&
ou deixar o script gerar os dados para stdout e usar |
.
Ao usar &&
, o mail
comando só seria executado quando o script terminasse com 0.
Ao usar o caractere pipe, seu script precisa enviar os dados para stdout para que o pipe possa passá-los para mail
.
No que você escreveu, o script grava dados no arquivo e mail
lê o arquivoem paralelo— e mail
acaba lendo o arquivo antes que o script tenha escrito algo nele.
Responder2
/dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Você está canalizando a saída cleanSDP2xLogs.sh
para o mail
comando, o que não acho que seja o que você quer dizer. Parece que você deseja primeiro executar cleanSDP2xLogs.sh
para gerar /tmp/sdplogs.out e depois alimentar /tmp/sdplogs.out no comando de email.
Se for esse o caso, basta substituir |
por ;
e você ficará bem:
/dproxy/scripts/cleanSDP2xLogs.sh; mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Responder3
Outra maneira de fazer isso é usar -a
como anexo:
/dproxy/scripts/cleanSDP2xLogs.sh
mail -s 'SDP2.X Prod LogArchiving Report' -a /tmp/sdplogs.out [email protected] << ""