Cron для отправки электронной почты, если файл не существует

У меня есть cron задание, которое выполняет сценарий оболочки, как, следуя

00 01 * * * sh /backup/script.sh

Теперь мне нужно, чтобы добавить функциональность в работе cron, так что, если этот сценарий не существует, то оно порождает оповестить меня по электронной почте с помощью утилиты sendmail.

Что-то вроде

00 01 * * * find script and execute script or if find no result then email.
1
задан 10 September 2013 в 19:00

3 ответа

Я вижу два общих решения. Один из них - заставить cron уведомлять вас о результатах команд, которые он запускает. В частности, справочная страница crontab (5) утверждает, что

cron (8) будет смотреть на MAILTO, если у него есть какие-либо причины для отправки почты в результате выполнения команд в `` this '' crontab. Если MAILTO определено (и не пусто), почта отправляется пользователю с таким именем.

Просто поместите строку, подобную следующей, в заголовок файла 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
0
ответ дан 10 September 2013 в 19:00

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 над существующей.

0
ответ дан 10 September 2013 в 19:00

Ну, тебе понадобится еще один сценарий. Примерно так:

#!/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
0
ответ дан 10 September 2013 в 19:00

Другие вопросы по тегам:

Похожие вопросы: