mysqldump 到文件中,任何错误都会触发带有错误信息的 cURL 请求

mysqldump 到文件中,任何错误都会触发带有错误信息的 cURL 请求

我正在尝试设置一个要从命令行执行的备份,如果出现错误,它会将错误发送到 API 端点。类似于:

mysqldump -u whatever -pwhatever somedb > somebackupfile.sql || curl (..options..) -d $'{error:<ERROR FROM FIRST COMMAND>}'

任何帮助将不胜感激!

答案1

将错误流保存到单独的文件中,curl如果出现错误,则将其保存到“it”中。然后删除它(或者保留它,它可能有用吗?):

if ! mysqldump -u whatever -pwhatever somedb >somebackupfile.sql 2>error.log
then
    json=$( jq -c -n --arg message "$(cat error.log)" '{ error: $message }' )
    curl ...options... -d "$json"
fi
rm -f error.log   # or not

这还用于jq将错误输出正确编码为error.logJSON 文本字符串。

如果您想更改逻辑,以便在error.log文件不为空时发送文件的内容,可能是因为mysqldump程序没有返回正常的退出状态(我目前不知道这个特定程序的行为方式):

mysqldump -u whatever -pwhatever somedb >somebackupfile.sql 2>error.log

if [ -s error.log ]; then
    json=$( jq -c -n --arg message "$(cat error.log)" '{ error: $message }' )
    curl ...options... -d "$json"
fi
rm -f error.log   # or not

文件-s测试是真的如果指定文件的大小非零。

相关内容