如何使用服务器连接错误解决 mongodump 错误代码 0?
Posted
技术标签:
【中文标题】如何使用服务器连接错误解决 mongodump 错误代码 0?【英文标题】:How to resolve mongodump error code 0 with server connection error? 【发布时间】:2021-11-16 22:09:53 【问题描述】:我正在编写一个使用 mongodump
备份 mongodb 实例的 bash 脚本。脚本有多个步骤,只有在转储成功时才会运行,所以我需要一个错误代码来告诉我备份是否成功运行。我一直在使用以下内容:
for i in $(seq 1 30); do
mongodump --host mongodb -u user -p password --archive | gzip > backup.gz
check=$?
echo "$check"
if [ "$check" -eq "0" ]; then
break
fi
done
if [ "$check" -eq "0" ]; then
echo "do something with the file"
fi
这很好用,当 mongodump 实际上成功时,但问题是,即使 mongodump 失败,它也会返回 0。这似乎与我从他们的文档 here 中理解的相反。
例如,如果我通过拔下网络电缆断开此服务器与数据库的连接,则会失败并显示错误 Failed: can't create session: could not connect to server: server selection error: server selection timeout
。但它的返回码也是0
,就像成功一样。
也许应该是这样,但是如果网络错误的错误代码与成功相同,我该如何检查网络错误?
或者说成功来自于 gzip?这会让我产生疑问,为什么 mongodump 即使在网络故障时也会创建备份文件?
【问题讨论】:
【参考方案1】:将 $?
替换为 "$PIPESTATUS[0]"
以获取管道中第一个命令 (mongodump ...
) 的退出状态。
来自man bash
:
PIPESTATUS
:一个数组变量,包含最近执行的前台管道(可能只包含一个命令)中进程的退出状态值列表。
或者避免使用管道。替换
mongodump --host mongodb -u user -p password --archive | gzip > backup.gz
与
mongodump --host mongodb -u user -p password --archive > >(gzip > backup.gz)
【讨论】:
以上是关于如何使用服务器连接错误解决 mongodump 错误代码 0?的主要内容,如果未能解决你的问题,请参考以下文章