【问题标题】:Catching mysqldump error in bash script在 bash 脚本中捕获 mysqldump 错误
【发布时间】:2014-12-09 09:21:21
【问题描述】:

我目前正在尝试编写一个脚本来备份我的几个网站及其数据库。

一切运行良好,但我正试图让我的日志更聪明一点 - 基本上,目前它会尝试运行 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,所以在你的 mysqldump 命令中使用它来不覆盖日志文件。

标签: bash shell error-handling mysqldump


【解决方案1】:

所以我添加了“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 更好,但我不会更改这些部分。

【讨论】:

  • 我真的很喜欢这个答案! if mysqldump... 确实是一个显而易见的答案,但它从来没有让我坚持使用它!添加到@zerodiff 的使用2>> $LOG_LOCATION 的建议中,这是完美的解决方案。额外的建议也非常受欢迎。谢谢!
【解决方案2】:

a) 您可以像这样在变量中捕获错误输出:

somevar="$( ( mysqldump -u $DB_USER --password=$DB_PASS $DB_NAME > $MYSQL_LOCATION ) 2>&1 )"

b) 你可以检查这个变量的内容,像往常一样显示一条消息,然后

c) 您可以使用echo "$somevar" >> $LOG_LOCATION轻松将其转发到您的日志文件中

问候

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2021-04-20
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多