У меня есть cron
задание, которое выполняет сценарий оболочки, как, следуя
00 01 * * * sh /backup/script.sh
Теперь мне нужно, чтобы добавить функциональность в работе cron
, так что, если этот сценарий не существует, то оно порождает оповестить меня по электронной почте с помощью утилиты sendmail
.
Что-то вроде
00 01 * * * find script and execute script or if find no result then email.
Я вижу два общих решения. Один из них - заставить cron уведомлять вас о результатах команд, которые он запускает. В частности, справочная страница crontab (5) утверждает, что
cron (8) будет смотреть на MAILTO, если у него есть какие-либо причины для отправки почты в результате выполнения команд в `` this '' crontab. Если MAILTO определено (и не пусто), почта отправляется пользователю с таким именем.
blockquote>Просто поместите строку, подобную следующей, в заголовок файла crontab:
MAILTO=username@domain.com
В качестве альтернативы, если вы хотите более специализированное решение, вы можете создать сценарий и поместить его в место, где его гарантированно можно найти (например,
/bin
). Сам скрипт проверяет наличие фактического скрипта, если да, запускает его, если нет, отправляет вам уведомление. Что-то вроде следующего:#!/bin/bash myscript=/path/to/your/script myemail=username@server.org if [ -f "$myscript" ] ; then exec "$myscript" else mail -s "Error running $myscript" $myemail <<EOF There was an error running the script $myscript The script could not be found EOF fi
Вы можете даже сделать его общим:
#!/bin/bash myscript=$1 shift 1 params=$* myemail=username@server.org if [ -f "$myscript" ] ; then exec "$myscript $*" else mail -s "Error running $myscript" $myemail <<EOF There was an error running the script $myscript The script could not be found EOF fi
cron уже делает это для тебя. Ваша запись в crontab гласит:
00 01 * * * sh /backup/script.sh
В указанное время cron выполнит указанную вами команду и отправит вам по электронной почте ее вывод.
Выходные данные sh /does/not/exist
: sh: 0: Can't open /does/not/exist
. Вот что cron отправит вам по электронной почте, если файл не существует.
Возможно, вам необходимо убедиться, что ваша система правильно настроена для работы с электронной почтой, чтобы cron мог успешно отправить вам электронное письмо. Вы упомянули sendmail; если sendmail настроен правильно и электронная почта вашего пользователя работает, то cron также будет работать
Переменная MAILTO
также может помочь, если вам нужно отправить по электронной почте другой адрес, или если электронная почта вашего пользователя не работает, но отправка электронной почты на определенный адрес электронной почты в Интернете делает. Просто добавьте строку MAILTO=foo@example.com
над существующей.
Ну, тебе понадобится еще один сценарий. Примерно так:
#!/bin/bash
file="/path/to/script.sh"
# if script.sh exists and is executable.
if [ -x $file ]; then
# execute script.sh
sh /path/to/script.sh
else
#send mail
echo "script.sh doesn't exists or is not executable" | sendmail me@example.com
fi