Corpo da mensagem nulo; espero que esteja tudo bem

Corpo da mensagem nulo; espero que esteja tudo bem

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.outarquivo ele contém conteúdo.

O script /dproxy/scripts/cleanSDP2xLogs.shenvia 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 mailcomando 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 maillê o arquivoem paralelo— e mailacaba 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.shpara o mailcomando, o que não acho que seja o que você quer dizer. Parece que você deseja primeiro executar cleanSDP2xLogs.shpara 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 -acomo anexo:

/dproxy/scripts/cleanSDP2xLogs.sh
mail -s 'SDP2.X Prod LogArchiving Report' -a /tmp/sdplogs.out [email protected] << ""

informação relacionada