- проверка выполнение сработала ли какая-либо команда в bash , Vlad, 18:58 , 19-Ноя-19 (1)
- проверка выполнение сработала ли какая-либо команда в bash , Licha Morada, 19:29 , 19-Ноя-19 (2)
> День добрый, есть скрипт который бекапит базы 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. Однако порекомендую отправлять сообщение не только в случае ошибки, но и при успешном выполнении, пусть будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно и на каком именно месте ошиблся, и что именно пытался сделать.
- проверка выполнение сработала ли какая-либо команда в bash , sa1nt, 11:48 , 20-Ноя-19 (3) –1
>[оверквотинг удален] > Ну и, как водится, пара непрошенных советов: > Не передавайте пароль mysqldump в командной строке, храните его в ~/.my.cnf или > типа того. > Не лезте в базу из скрипта как root, создайте специального пользователя чтобы > смог прочесть всё для бакапа из правильных баз, но не смог > порочесть из неправильных или что-то испортить. > Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение > не только в случае ошибки, но и при успешном выполнении, пусть > будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно > и на каком именно месте ошиблся, и что именно пытался сделать. не могли бы написать для меня ибо я не очень в этом деле. в долгу не останусь!
- проверка выполнение сработала ли какая-либо команда в bash , erera22, 14:46 , 20-Ноя-19 (4)
mysqldump --any-dump-keys db > db.dump 2>/tmp/err [ $? -eq 0 ] || cat "/tmp/err"
- проверка выполнение сработала ли какая-либо команда в bash , sa1nt, 16:05 , 20-Ноя-19 (6)
>[оверквотинг удален] >> типа того. >> Не лезте в базу из скрипта как root, создайте специального пользователя чтобы >> смог прочесть всё для бакапа из правильных баз, но не смог >> порочесть из неправильных или что-то испортить. >> Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение >> не только в случае ошибки, но и при успешном выполнении, пусть >> будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно >> и на каком именно месте ошиблся, и что именно пытался сделать. > не могли бы написать для меня ибо я не очень в этом > деле. в долгу не останусь!Прошу прощения Был в отчаянии.
- проверка выполнение сработала ли какая-либо команда в bash , Licha Morada, 20:13 , 20-Ноя-19 (7)
>>[оверквотинг удален] >> Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение >> не только в случае ошибки, но и при успешном выполнении, пусть >> будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно >> и на каком именно месте ошиблся, и что именно пытался сделать. > не могли бы написать для меня ибо я не очень в этом > деле. в долгу не останусь!Боюсь, что нет. Не мой бизнес.
- проверка выполнение сработала ли какая-либо команда в bash , sa1nt, 15:33 , 20-Ноя-19 (5) +1
Сделал - вроде работает. email с авторизацией. Вот код может пригодится кому. #/bin/bash
allerror="" set -o pipefail mysqldump -user -hlocalhost -password --default-character-set=cp1251 par1 | gzip -c > /var/backups/backup/mysql/par1-`date "+%Y-%m-%d"`.sql.gz if [ $? -ne 0 ]; then allerror="Backup базы par1 не выполнен\n" fi mysqldump -user -hlocalhost -password --default-character-set=cp1251 par2 | gzip -c > /var/backups/backup/mysql/par2-`date "+%Y-%m-%d"`.sql.gz if [ $? -ne 0 ]; then allerror="${allerror}Backup базы par2 не выполнен\n" fi mysqldump -user -hlocalhost -password --default-character-set=cp1251 par3 | gzip -c > /var/backups/backup/mysql/par3-`date "+%Y-%m-%d"`.sql.gz if [ $? -ne 0 ]; then allerror="${allerror}Backup базы par3 не выполнен\n" fi mysqldump -user -hlocalhost -password --default-character-set=cp1251 par4 | gzip -c > /var/backups/backup/mysql/par4-`date "+%Y-%m-%d"`.sql.gz if [ $? -ne 0 ]; then allerror="${allerror}Backup базы par4 не выполнен\n" fi if [[ -n "$allerror" ]]; then TMP=$(mktemp) FROM_EMAIL_ADDRESS="откого@example.net" TO_EMAIL_ADDRESS="кому@example.net" EMAIL_SUBJECT="Тема письма" SMTP="smtp.example.net:25" FRIENDLY_NAME="User Name" EMAIL_ACCOUNT_PASSWORD="smtp_password" cat > $TMP << EOF EOF cat $TMP | \ echo -e $allerror | iconv -t UTF-8 | mailx -v \ -s "$EMAIL_SUBJECT" \ -S smtp-auth=login \ -S smtp=${SMTP} \ -S from="${FROM_EMAIL_ADDRESS}(${FRIENDLY_NAME})" \ -S smtp-auth-user=$FRIENDLY_NAME \ -S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \ $TO_EMAIL_ADDRESS [ -e $TMP ] && rm $TMP fi
- проверка выполнение сработала ли какая-либо команда в bash , Licha Morada, 20:26 , 20-Ноя-19 (8)
> Сделал - вроде работает.Замечательно. Там ещё много стружки можно снять. Имейте в виду, что если вы запускаете скрипт из Cron, то этот сервис сам умеет слать почту. Таким образом, в скрипте можно не возиться с настройкой и запуском mailx, а просто писать диагностику на стандартный вывод (stdout). Cron это подхватит, завернёт и скормит системному почтовику. Заодно пометит, если возвращённый код отличается от нуля.
- проверка выполнение сработала ли какая-либо команда в bash , sa1nt, 11:40 , 21-Ноя-19 (9)
>> Сделал - вроде работает. > Замечательно. > Там ещё много стружки можно снять. > Имейте в виду, что если вы запускаете скрипт из Cron, то этот > сервис сам умеет слать почту. Таким образом, в скрипте можно не > возиться с настройкой и запуском mailx, а просто писать диагностику на > стандартный вывод (stdout). Cron это подхватит, завернёт и скормит системному почтовику. > Заодно пометит, если возвращённый код отличается от нуля.Спасибо за наводку.
|