У меня есть следующая команда ниже как часть 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] << ""