2014-01-09 2 views
0

Я написал сценарий оболочки, который я использую под золой, и я перенаправляю 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 не пуст?

Благодаря

ответ

0

How to check if file is empty in bash

Что касается первого вопроса, то в вашем коде вы звоните mail, но ниже в посте вы звоните email. Проверьте свой код и убедитесь, что он mail.

Используйте which mail, чтобы получить полный путь. Возможно, он не установлен в/usr/bin /. Используйте поиск, чтобы найти mail. Если вы можете перейти в другую оболочку, запустите ее, а затем выполните which mail, чтобы получить полный путь почты в случае, если путь установлен в альтернативных оболочках.

+0

В моем вопросе была опечатка. Он сказал «mail» и «email». Я исправил это. Кроме того, я уже пробовал, что (ничего не возвращал) и нашел (возвратил '-sh: locate: not found') безрезультатно. Наконец, поток, который вы указали мне, не работает для меня, потому что он проверяет, является ли файл пустым, но в моем случае журнал не пуст, он содержит как stderr AND stdout, так и я хочу знать только, является ли stderr не пустой (файл журнала никогда не пуст, так как он всегда имеет stdout). – user3022204

+0

Попробуйте mailx. Если вы не можете найти его, установите его. – Hameed

+0

Я не нашел mailx, но я менеджер, чтобы получить часть электронной почты, используя sendmail. Однако, что касается моего ВТОРОГО вопроса, я попробовал «if [-s 2]; то 'to test является stderr пустым, но это, похоже, не работает. Я думаю, это потому, что 2 перенаправляется на мой файл журнала, поэтому он пуст. Как я могу проверить, есть ли что-то в stderr? – user3022204

Смежные вопросы