Пустое тело сообщения; надеюсь, это нормально

Пустое тело сообщения; надеюсь, это нормально

У меня есть следующая команда ниже как часть cronjob. Когда я запускаю команду через cron или в командной строке, я получаю Null message body; hope that's ok.

Содержимое письма пустое, но когда я проверяю файл, /tmp/sdplogs.outв нем есть содержимое.

Скрипт /dproxy/scripts/cleanSDP2xLogs.shотправляет вывод в файл /tmp/sdplogs.out.

Что я делаю не так? Буду очень признателен за любую помощь.

$ /dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Null message body; hope that's ok

решение1

Вам нужно либо заменить |на &&, либо позволить скрипту выводить данные в stdout и использовать |.

При использовании &&команда mailбудет выполнена только тогда, когда скрипт завершится с 0.

При использовании символа канала ваш скрипт должен отправить данные в stdout, чтобы канал мог передать их в mail.

В том, что вы написали, скрипт записывает данные в файл и mailсчитывает из файлав параллели— и mailв итоге считывает файл до того, как скрипт что-либо в него записал.

решение2

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

Вы передаете вывод cleanSDP2xLogs.shв mailкоманду, что, по-моему, не то, что вы имеете в виду. Кажется, вы сначала хотите запустить cleanSDP2xLogs.shдля генерации /tmp/sdplogs.out, а затем передать /tmp/sdplogs.out в команду mail.

Если это так, просто замените |на ;и все будет в порядке:

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

решение3

Другой способ сделать это — использовать -aвложение:

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

Связанный контент