0Ne*_*eji 5 error-handling bash shell mysqldump
我目前正在尝试编写一个脚本来备份我的几个站点及其数据库.
一切都运行良好,但我试图对我的日志更加聪明 - 基本上,目前它将尝试运行mysqldump并将回应成功或失败.
我宁愿做的是输出实际的错误而不仅仅是一个无用的'mysqldump failed'消息.我已经浏览了一下,我几乎可以这样做,我想要使用"2> log_file.txt"
我原来的命令:
mysqldump -u asdsa --password=$DB_PASS $DB_NAME > $MYSQL_LOCATION
if [ "$?" -eq 0 ]
then
    echo -e "mysqldump successfully finished at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
else
    echo -e "mysqldump failed at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
fi
所以我添加了"2> $ LOG_LOCATION |" 抓住实际的错误.所以我更新的命令看起来像这样(这个添加在第一行):
mysqldump -u $DB_USER--password=$DB_PASS $DB_NAME 2> $LOG_LOCATION | > $MYSQL_LOCATION
if [ "$?" -eq 0 ]
then
    echo -e "mysqldump successfully finished at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
else
    echo -e "mysqldump failed at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
fi
这会将错误输出到我的日志文件中,但会覆盖其中的任何内容.这也意味着我的错误检查if语句没有收到错误.
有什么方法可以:
a)从mysqldump函数中捕获实际错误(即该用户拒绝访问)b)将此错误附加到现有错误日志中c)在输出上述错误后还附加成功或失败消息
任何帮助都会很棒!
谢谢!
所以我添加了"2> $ LOG_LOCATION |"
这是一个错误 - 管道字符是多余的,并且将含义从简单的重定向更改为管道.
无论如何,正确的使用方法if是运行您想要检查其成功的实际命令作为条件.
if mysqldump -u "$DB_USER" --password="$DB_PASS" "$DB_NAME" 2>"$LOG_LOCATION" >"$MYSQL_LOCATION"
then
    echo -e "mysqldump successfully finished at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
else
    echo -e "mysqldump failed at $(date +'%d-%m-%Y %H:%M:%S')"$'\r' >> "$LOG_LOCATION"
fi
你可能有更好printf了echo -e,但我不会改变的部分.