Мне не удается заставить cron отправить вложение по электронной почте из-за предопределенного условия, установленного в сценарии bash. Ниже приведены мои настройки / etc / crontab:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=account@email.com
MAILFROM=cron@server.com
0,30 * * * * root /some/bash/script
Скрипт bash содержит:
#!/bin/bash
PATH=/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin
if [ -s /var/log/test ]; then
echo "test" | mailx -s "test" -a /var/log/test -r cron@server.com account@email.com
fi
exit 0
Проблема в том, что cron иногда отправляет электронное письмо, несмотря на то, что тестовый файл пуст. Иногда заголовок темы «test» заменяется cron собственным заголовком темы. Без установки "MAILFROM" cron будет использовать root, несмотря на установку в mailx.
Я новичок в cron, поэтому не уверен, правильно ли я все сделал. Был бы признателен, если бы кто-нибудь мог указать, что вызывает проблему.
Вы должны понять это cron
не просто отбрасывает вывод, созданный заданием. Если задание cron генерирует вывод, который иначе не обрабатывается (например, отправляя его кому-то по почте, или помещая его в файл, или каким-либо другим способом), этот вывод будет отправлен по электронной почте, как описано в переменной MAILTO. Если вы не хотите, чтобы это произошло, вам нужно убедиться, что результат не может выпасть после завершения вашей работы; вот почему очень часто можно увидеть записи crontab, которые говорят, например,
*/5 * * * * munin /usr/bin/munin-cron >& /dev/null
Этот терминал >& /dev/null
означает, что cron должен отклонить любой вывод, который не обрабатывается исполняемым файлом / скриптом.