Я создаю резервный скрипт для запуска на Ubuntu.Crontab запускает bash другим способом
backup-all.sh файл:
echo "bootstrap"
/home2/backup/bootstrap/backup.sh
BOOTSTRAP_STATUS=$([ "$?" == 0 ] && echo "OK" || echo "** FAIL **")
echo "sv2"
/home2/backup/sv2/backup.sh
SV2_STATUS=$([ "$?" == 0 ] && echo "OK" || echo "** FAIL **")
if [ "$BOOTSTRAP_STATUS" == "OK" ] && [ "$SV2_STATUS" == "OK" ] ; then
TITULO="Backup OK"
else
TITULO="Backup !FAILED!"
fi
(
echo "Backup status"
echo "-------------"
echo "BOOTSTRAP_STATUS = $BOOTSTRAP_STATUS"
echo "SV2_STATUS = $SV2_STATUS"
echo "-------------"
) | mail -s "${TITULO}" "[email protected]"
В backup.sh файлов заканчивается:
exit 0 # for success; OR:
exit 1 # for errors + send mail with log file
* backup.sh файлы содержат Rsync и MySQL Backup.
Когда скрипт вернет 1 (ошибка), он также отправит мне электронное письмо, в котором сообщается, что что-то не так, и все шаги записываются в файл журнала.
** У меня есть электронные письма. Один для обзора и один для каждого «сервера», который получает ошибки.
Итак, если я запускаю вручную,
./backup-all.sh
Все хорошо. Я получаю только одно письмо с заголовком «Резервное копирование ОК».
Если я жду cron для выполнения задания, я получаю только одно письмо с заголовком «Резервное копирование! FAILED!», Хотя я не получал ошибок, и файлы журнала в порядке.
crontab -e
0 0 * * * /home2/backup/backup-all.sh
Итак, что задание cron выполняет с условием/выходом значений моих скриптов?
Если вы не можете явно запросить bash (с '#!/Bin/bash'), вероятно, что' ["$?" == 0] 'является синтаксической ошибкой. –
Не синтаксическая ошибка, а только недопустимый аргумент, передаваемый ''. –