我正在撰寫一個 bash 腳本,它使用mongodump. 腳本有多個步驟,只有在轉儲成功時才會運行,所以我需要一個錯誤代碼來告訴我備份是否成功運行。我一直在使用以下內容:
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。這似乎違背了我從他們的檔案了解這里。
例如,如果我通過拔下網路電纜斷開此服務器與資料庫的連接,它會失敗并顯示錯誤Failed: can't create session: could not connect to server: server selection error: server selection timeout。但它的回傳碼也是0,就像成功一樣。
也許它應該是,但是如果網路錯誤的錯誤代碼與成功相同,我如何檢查網路錯誤?
還是成功來自 gzip?這會讓我產生疑問,為什么 mongodump 即使在網路故障時也會創建備份檔案?
uj5u.com熱心網友回復:
更換$?用"${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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/358067.html
上一篇:串列框不顯示對資料集所做的更改
