如何解决带有服务器连接错误的 mongodump 错误代码 0?
How to resolve mongodump error code 0 with server connection error?
我正在编写 bash 脚本,使用 mongodump
备份 mongodb 实例。该脚本有多个步骤,只有 运行 如果转储成功,所以我需要一个错误代码来告诉我备份是否 运行 成功。我一直在使用以下内容:
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 失败,它 returns 0。这似乎与我从他们的文档 here 中理解的相反。
例如,如果我通过拔下网络电缆断开此服务器与数据库的连接,它将失败并显示错误 Failed: can't create session: could not connect to server: server selection error: server selection timeout
。但是 return 代码也是 0
,就像成功一样。
应该是这样,但是如果网络错误的错误代码与成功相同,如何检查网络错误?
或者是 gzip 带来的成功?这会让我产生疑问,为什么即使在网络故障时 mongodump 也会创建备份文件?
将 $?
替换为 "${PIPESTATUS[0]}"
以获取管道中第一个命令 (mongodump ...
) 的退出状态。
来自man bash
:
PIPESTATUS
: An array variable containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command).
或者避开管道。替换
mongodump --host mongodb -u user -p password --archive | gzip > backup.gz
和
mongodump --host mongodb -u user -p password --archive > >(gzip > backup.gz)
我正在编写 bash 脚本,使用 mongodump
备份 mongodb 实例。该脚本有多个步骤,只有 运行 如果转储成功,所以我需要一个错误代码来告诉我备份是否 运行 成功。我一直在使用以下内容:
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 失败,它 returns 0。这似乎与我从他们的文档 here 中理解的相反。
例如,如果我通过拔下网络电缆断开此服务器与数据库的连接,它将失败并显示错误 Failed: can't create session: could not connect to server: server selection error: server selection timeout
。但是 return 代码也是 0
,就像成功一样。
应该是这样,但是如果网络错误的错误代码与成功相同,如何检查网络错误?
或者是 gzip 带来的成功?这会让我产生疑问,为什么即使在网络故障时 mongodump 也会创建备份文件?
将 $?
替换为 "${PIPESTATUS[0]}"
以获取管道中第一个命令 (mongodump ...
) 的退出状态。
来自man bash
:
PIPESTATUS
: An array variable containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command).
或者避开管道。替换
mongodump --host mongodb -u user -p password --archive | gzip > backup.gz
和
mongodump --host mongodb -u user -p password --archive > >(gzip > backup.gz)