> День добрый, есть скрипт который бекапит базы mysql. столкнулся с такой проблемой,
> поломалась как-то база и скрипт бекап делал zero размер с ошибкой
> но, делал. Возник вопрос как проверять что команды выполнились без ошибки?
> А если есть ошибка отправить сообщение на email.Придумыайте критерии по которым будете определять, удовлетворительно прошёл бекап или нет. Например:
- Ловите exit code выполнения mysqldump. Имейте в виду "что в лоб" вы получите exit code выполнения gzip а не mysqldump. Типа
set -o pipefail
mysqldump какие-то-параметры-чтобы-была-ошибка | gzip -c > par.sql.gz
echo $?
- Если при типичной ошибке получается размер файла 0, то это может оказаться уже полезно. Типа
if [ $(wc -c < par.sql.gz) -le 0 ] ...
- Смотрите на содежимое получившегося файла, например, на количество незакоментированных строк и/или наличие какого-нибудь кодового слова. Типа
if zcat par.sql.gz | wc -l ...
if zcat par.sql.gz | grep волшебное-слово
Ну и, как водится, пара непрошенных советов:
Не передавайте пароль mysqldump в командной строке, храните его в ~/.my.cnf или типа того.
Не лезте в базу из скрипта как root, создайте специального пользователя чтобы смог прочесть всё для бакапа из правильных баз, но не смог порочесть из неправильных или что-то испортить.
Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение не только в случае ошибки, но и при успешном выполнении, пусть будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно и на каком именно месте ошиблся, и что именно пытался сделать.