@nikweter
Системный администратор

Почему скрипт отрабатывает именно так?

Сделал скрипт выгрузки дампа mysql и небольшой его проверки.
Почему-то уведомление об ошибке отправляется раньше, чем закончится выгрузка дампа.
Почему так?
#/bin/bash
#Set date
DATE=`date +%d%m%y`

#Create backup dir
mkdir /var/lib/bareos/backup

for base in base1 base2
do

#dump bases
mysqldump $base > /var/lib/bareos/backup/$base-$DATE.sql &2>> /var/log/mysql/log.txt


#Request for list of tables in base
req=($(mysql -e "show tables in $base;"|tail -n +2))

#Find for list of tables in dump
gr=($(sed -rn 's/DROP TABLE IF EXISTS `(\w+)`.*/\1/p' /var/lib/bareos/backup/$base-$DATE.sql|grep -v '^/'))


#Check 2 lists
check=`echo ${req[@]} ${gr[@]} | tr ' ' '\n' | sort | uniq -u`
if [ "$check" == "" ]
then

echo "OK" >>  /var/log/mysql/log.txt

else

#Send mail alert
printf "Subject:%b\nFrom:%b\nTo:%b\n%b\n" \
       "Mysql tenmon alert" "alert@site.ru" "savelev@site.ru" \
       "Mysql dump $base is break"|\
msmtp -t --host=site.ru \
      --port=587 \
      --user=alert@site.ru \
      --passwordeval="echo password" \
      --from=alert@site.ru \
      --tls=on \
      --tls-certcheck=off \
      --auth=on

fi

done
exit
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
mysqldump $base > /var/lib/bareos/backup/$base-$DATE.sql &2>> /var/log/mysql/log.txt

потому что нет такого перенаправления в баше: &2>>, & трактуется как "выполнять в фоне".
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
mysqldump $base > /var/lib/bareos/backup/$base-$DATE.sql &2>> /var/log/mysql/log.txt


Вот тут нужно
mysqldump $base > /var/lib/bareos/backup/$base-$DATE.sql 2>> /var/log/mysql/log.txt

иначе вы mysqldump в фон отправляете, а не STDERR перенаправляете.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы