我正在尝试设置一个要从命令行执行的备份,如果出现错误,它会将错误发送到 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.log
JSON 文本字符串。
如果您想更改逻辑,以便在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
测试是真的如果指定文件的大小非零。