如何解决带有服务器连接错误的 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)