The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"проверка выполнение сработала ли какая-либо команда в bash "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от sa1nt (ok), 19-Ноя-19, 17:44 
День добрый, есть скрипт который бекапит базы mysql. столкнулся с такой проблемой, поломалась как-то база и скрипт бекап делал zero размер с ошибкой но, делал. Возник вопрос как проверять что команды выполнились без ошибки? А если есть ошибка отправить сообщение на email.
Вот сам скрипт:

mysqldump -uroot -hlocalhost -123456-dezS –default-character-set=cp1251 par1 | gzip -c > /var/backups/backup/mysql/par1-date "+%Y-%m-%d".sql.gz

mysqldump -uroot -hlocalhost -123456-dezS –default-character-set=cp1251 par2 | gzip -c > /var/backups/backup/mysql/par2-date "+%Y-%m-%d".sql.gz

mysqldump -uroot -hlocalhost -123456-dezS –default-character-set=cp1251 par3 | gzip -c > /var/backups/backup/mysql/par3-date "+%Y-%m-%d".sql.gz

mysqldump -uroot -hlocalhost -123456-dezS –default-character-set=cp1251 par4 | gzip -c > /var/backups/backup/mysql/par4-date "+%Y-%m-%d".sql.gz

#Удаляем файлы бекапов старше 7 дней tmpwatch -m 7d /var/backups/backup/mysql/

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от Vlad (??), 19-Ноя-19, 18:58 
http://kedar.nitty-witty.com/blog/mysql-database-backup-shel...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от Licha Morada (ok), 19-Ноя-19, 19:29 
> День добрый, есть скрипт который бекапит базы 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. Однако порекомендую отправлять сообщение не только в случае ошибки, но и при успешном выполнении, пусть будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно и на каком именно месте ошиблся, и что именно пытался сделать.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "проверка выполнение сработала ли какая-либо команда в bash "  –1 +/
Сообщение от sa1nt (ok), 20-Ноя-19, 11:48 
>[оверквотинг удален]
> Ну и, как водится, пара непрошенных советов:
> Не передавайте пароль mysqldump в командной строке, храните его в ~/.my.cnf или
> типа того.
> Не лезте в базу из скрипта как root, создайте специального пользователя чтобы
> смог прочесть всё для бакапа из правильных баз, но не смог
> порочесть из неправильных или что-то испортить.
> Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение
> не только в случае ошибки, но и при успешном выполнении, пусть
> будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно
> и на каком именно месте ошиблся, и что именно пытался сделать.

не могли бы написать для меня ибо я не очень в этом деле. в долгу не останусь!

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от erera22 (ok), 20-Ноя-19, 14:46 
mysqldump --any-dump-keys db > db.dump 2>/tmp/err
[ $? -eq 0 ] || cat "/tmp/err"
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "проверка выполнение сработала ли какая-либо команда в bash "  +1 +/
Сообщение от sa1nt (ok), 20-Ноя-19, 15:33 
Сделал - вроде работает.
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


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от sa1nt (ok), 20-Ноя-19, 16:05 
>[оверквотинг удален]
>> типа того.
>> Не лезте в базу из скрипта как root, создайте специального пользователя чтобы
>> смог прочесть всё для бакапа из правильных баз, но не смог
>> порочесть из неправильных или что-то испортить.
>> Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение
>> не только в случае ошибки, но и при успешном выполнении, пусть
>> будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно
>> и на каком именно месте ошиблся, и что именно пытался сделать.
> не могли бы написать для меня ибо я не очень в этом
> деле. в долгу не останусь!

Прошу прощения Был в отчаянии.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от Licha Morada (ok), 20-Ноя-19, 20:13 
>>[оверквотинг удален]
>> Воздержусь от описания собственно отправки на email. Однако порекомендую отправлять сообщение
>> не только в случае ошибки, но и при успешном выполнении, пусть
>> будет канарейкой. Включайте в сообщение достаточно информации, чтобы понять, кто именно
>> и на каком именно месте ошиблся, и что именно пытался сделать.
> не могли бы написать для меня ибо я не очень в этом
> деле. в долгу не останусь!

Боюсь, что нет. Не мой бизнес.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

8. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от Licha Morada (ok), 20-Ноя-19, 20:26 
> Сделал - вроде работает.

Замечательно.

Там ещё много стружки можно снять.
Имейте в виду, что если вы запускаете скрипт из Cron, то этот сервис сам умеет слать почту. Таким образом, в скрипте можно не возиться с настройкой и запуском mailx, а просто писать диагностику на стандартный вывод (stdout). Cron это подхватит, завернёт и скормит системному почтовику. Заодно пометит, если возвращённый код отличается от нуля.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "проверка выполнение сработала ли какая-либо команда в bash "  +/
Сообщение от sa1nt (ok), 21-Ноя-19, 11:40 
>> Сделал - вроде работает.
> Замечательно.
> Там ещё много стружки можно снять.
> Имейте в виду, что если вы запускаете скрипт из Cron, то этот
> сервис сам умеет слать почту. Таким образом, в скрипте можно не
> возиться с настройкой и запуском mailx, а просто писать диагностику на
> стандартный вывод (stdout). Cron это подхватит, завернёт и скормит системному почтовику.
> Заодно пометит, если возвращённый код отличается от нуля.

Спасибо за наводку.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру