Я написал сценарий оболочки, который я использую под золой, и я перенаправляю stderr и stdout в файл журнала. Я бы хотел, чтобы этот файл журнала отправлялся мне по электронной почте, только если stderr не пуст.Как отправить stderr в сценарий оболочки электронной почты (ash)
Я пробовал:
exec >mylog.log 2>&1
# Perform various find commands
if [TEST_IF_STDERR_NOT_EMPTY]; then
/usr/bin/mail -s "mylog" [email protected] < mylog.log
fi
Мой вопрос имеет два аспекта:
1- я получаю ошибку -sh: /usr/bin/mail: not found
. Кажется, что почтовая команда не существует под золой (или, по крайней мере, под моей Linux-линией, которая является NAS Synology), что было бы альтернативой? Худший случай, perl доступен, но я бы предпочел использовать стандартные команды sh.
2 Как проверить, что stderr не пуст?
Благодаря
В моем вопросе была опечатка. Он сказал «mail» и «email». Я исправил это. Кроме того, я уже пробовал, что (ничего не возвращал) и нашел (возвратил '-sh: locate: not found') безрезультатно. Наконец, поток, который вы указали мне, не работает для меня, потому что он проверяет, является ли файл пустым, но в моем случае журнал не пуст, он содержит как stderr AND stdout, так и я хочу знать только, является ли stderr не пустой (файл журнала никогда не пуст, так как он всегда имеет stdout). – user3022204
Попробуйте mailx. Если вы не можете найти его, установите его. – Hameed
Я не нашел mailx, но я менеджер, чтобы получить часть электронной почты, используя sendmail. Однако, что касается моего ВТОРОГО вопроса, я попробовал «if [-s 2]; то 'to test является stderr пустым, но это, похоже, не работает. Я думаю, это потому, что 2 перенаправляется на мой файл журнала, поэтому он пуст. Как я могу проверить, есть ли что-то в stderr? – user3022204