web-dev-qa-db-ja.com

bashからmongoコマンドを実行する方法は?

私はこのコマンドをbashスクリプトから実行しようとしています:

 mongo 192.168.10.20:27000 --eval "use admin && db.shutdownServer() && quit()"

しかし、私はこのエラーを受け取ります:

[rs.initiate() && use admin && db.shutdownServer() && quit()] doesn't exist

jsファイルを使用せずにそれを行うにはどうすればよいですか?

11
MoienGK

インタラクティブ&スクリプトmongoシェルセッションの違い があります。特に、_use admin_などのコマンドは有効なJavaScriptではなく、対話型のシェルセッションでのみ機能します。

シャットダウンコマンドラインと同等の機能は次のようになります。

_mongo 192.168.10.20:27000/admin --eval "db.shutdownServer()"
_

接続文字列に使用するデータベースを含めることができ、スクリプト化されたmongo Shellセッションを終了する必要はありません。

スクリプトセッションからデータベースを変更する必要がある場合は、 db.getSiblingDB() JavaScript関数があります。上記のシャットダウンコマンドを記述する別の方法は次のとおりです。

_ mongo 192.168.10.20:27000 --eval "db=db.getSiblingDB('admin');db.shutdownServer()"
_
19
Stennie

ヒアドキュメント構文を使用できます。

#! /bin/sh
mongo <<EOF
use admin
db.shutdownServer()
quit()
exit

EOFがbashスクリプトの最後にない場合、ヒアドキュメント構文は警告をスローします。これはbashスクリプトのバージョンです。

#! /bin/bash
mongo <<EOF
use admin
db.shutdownServer()
quit()
EOF

これが出力です、これはあなたが期待したものだと思います。

MongoDB Shell version: 2.4.14
connecting to: test
switched to db admin
Wed Jun 24 17:07:23.808 DBClientCursor::init call() failed
server should be down...
Wed Jun 24 17:07:23.810 trying reconnect to 127.0.0.1:27017
Wed Jun 24 17:07:23.810 reconnect 127.0.0.1:27017 ok
Wed Jun 24 17:07:23.812 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed Jun 24 17:07:23.812 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:27017] 
Wed Jun 24 17:07:23.812 DBClientCursor::init call() failed
10
Ugur

mongo docs から:

-evalオプション

次のように、-evalオプションを使用してシェルにJavaScriptフラグメントを渡します:mongo test --eval "printjson(db.getCollectionNames())"

JSフラグメントを.jsファイルを実行します。

mongo < myScript.js

あなたはこれでより有用なものを見つけるかもしれません SO質問

4
Hamed