私は最近同じ問題を抱えていました。すべての出力をログファイルに記録するようにmongodを構成し、mongodの準備ができていることを示す出力が表示されるまで、ログファイルをチェックするループで待機することにしました。
これは、待機する必要があるログファイル出力行の例です。
Tue Dec 3 14:25:28.217 [initandlisten] waiting for connections on port 27017
これは私が思いついたbashスクリプトです:
#!/ビン/バッシュ
# mongo データ フォルダーとログファイルを初期化する
mkdir -p /data/db
touch /var/log/mongodb.log
# mongodb を起動してログを記録する
# --logpath この mongod がないと、すべてのログ情報が標準出力に出力されます。
# --logappend mongod がログファイルの末尾に新しいエントリを追加することを確認します。下のテールが常に何かを見つけるように、最初に作成します
/usr/bin/mongod --quiet --logpath /var/log/mongodb.log --logappend &
# 準備が整ったことを mongo がログに記録するまで待ちます (または 60 秒後にタイムアウトします)
カウンター=0
grep -q 'ポートで接続を待機中' /var/log/mongodb.log
[[ $? -ne 0 && $COUNTER -lt 60 ]] ; 行う
睡眠 2
カウンター+=2とする
echo "mongo が初期化されるのを待っています... (ここまでの $COUNTER 秒)"
grep -q 'ポートで接続を待機中' /var/log/mongodb.log
終わり
# これで mongo の準備が整い、他のコマンドを続行できることがわかりました
...
スクリプトは永遠に待機するわけではなく、60 秒後にタイムアウトになることに注意してください。ユース ケースによっては、それが必要な場合とそうでない場合があります。