Я пытаюсь запустить тестовый пример с помощью тестирования автоматизации (sahi), поэтому я запускаю его повторно через 1 час (через crontab). Я хочу, чтобы всякий раз, когда мой тестовый пример терпел неудачу, я должен был получить электронное письмо, если нет. Прямо сейчас я получаю почту, проходит ли она или не работает. Короче говоря, могу ли я отправить почту человеку в зависимости от результата, который я получаю в терминале.
Я использую Ubuntu 10.10.
Трубопроводы работают в cron так же, как и в bash. Вы можете передать вывод сценарию, который проверяет его и отправляет почту. Или еще проще использовать grep:
# in /etc/crontab
MAILTO=a.b@c.de
SHELL=/bin/bash
# m h dom mon dow user command
30 * * * * confus /home/confus/bin/someCommand.sh | grep -A 11 -B 10 "Error:"
Это отправит электронное письмо на a.b @ .c.de, когда на выходе someCommand.sh появляется сообщение об ошибке «Ошибка:». В этом случае текст сообщения электронной почты будет выводиться из 10 строк до и 11 строк после появления «Error:» (отсюда -A для after и -B для ранее).
Почта отправляется только в том случае, если на компьютере, на котором работает cron, установлен рабочий почтовый сервер. Скрипт для обработки вывода, конечно, более гибкий и значительно более эффективный.
Кажется, что либо код выхода вашей команды настроен неправильно, либо вы отправляете сообщения на stdout, но не захватываете / не перенаправляете его. Успешно, вы должны вернуть 0 (exit 0). И при отказе возвращают положительное число менее 256 (exit 2). Cron будет обнаруживать код выхода и отправлять электронную почту (переменная MAILTO в crontab) на ненулевой код выхода.
Кроме того, если какой-либо вывод отправляется на stdout или stderr, он отправляется пользователю по электронной почте, независимо от того, кода выхода.
Для получения дополнительной информации см. справочную страницу cron (8).