The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
проверка выполнение сработала ли какая-либо команда в bash , !*! sa1nt, 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/

  • проверка выполнение сработала ли какая-либо команда в 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 это подхватит, завернёт и скормит системному почтовику.
        > Заодно пометит, если возвращённый код отличается от нуля.

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




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

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