回答:
MongoDBの起動と停止については、MongoDBのマニュアルで説明しています。シェル、cli、ドライバーなどを介してMongoDBを停止するさまざまなオプションについて説明します。また、MongoDBを誤って停止するリスク(データの破損など)について詳しく説明し、さまざまなkillシグナルについて説明します。
さらに、UbuntuまたはDebianのパッケージマネージャーを使用してMongoDBをインストールしている場合は、次のようにmongodb(現在はubuntuのmongod)を停止できます。
新興企業: sudo service mongod stop
Sysvinit: sudo /etc/init.d/mongod stop
またはMac OS X
を使用してmongodプロセスのPIDを見つけます $ top
プロセスを強制終了します$ kill <PID>
(Mongoのドキュメントにこれに関する詳細があります)
またはRed Hatベースのシステム:
service mongod stop
または、Windowsで次の名前のサービスとしてインストールした場合MongoDB
:
net stop MongoDB
サービスとしてインストールされていない場合(Windows 7以降)、次のコマンドを実行できます。
taskkill /f /im mongod.exe
クリーンシャットダウンの問題、そのようなシナリオを回避する最良の方法、およびクリーンシャットダウンが発生した場合の対処方法の詳細については、「予期しないシャットダウン後のデータの回復」を参照してください。
文字通り、元の質問のコマンドと同等の1行が必要な場合は、次のように別名を付けることができます。
mongo --eval "db.getSiblingDB('admin').shutdownServer()"
サービスを介したMongoDBの開始と停止に関するMarkの答えは、より一般的な(そして推奨される)管理アプローチです。
start C:\mongodb\bin\mongod.exe --config C:\net2\primary1-pc\mongod.cfg start C:\mongodb\bin\mongod.exe --config C:\net2\secondary1-pc\mongod.cfg ...
C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27017 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27018 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27019 ...
net stop MongoDB
は信頼できないため、同様の方法を使用しましたmongo admin --eval "db.shutdownServer()"
。乾杯!
mongod --dbpath /path/to/your/db --shutdown
公式の詳細情報:http : //docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
mongod v3.4.10
: Error parsing command line: unrecognised option '--shutdown'
:-(
db.shutdownServer({force:1,timeoutSecs:0})
残りのデータのセカンダリへのフラッシュを禁止するように動作するようです。あなたはいつもそれを望んでいないかもしれません。
サーバーがターミナルでフォアグラウンドプロセスとして実行されている場合、これは
Ctrl-C
実行中のサーバーを正常にシャットダウンする別の方法は、shutdownコマンドを使用することです。
> use admin
> db.shutdownServer();
それ以外の場合は、killなどのコマンドを使用してシグナルを送信できます。mongodのPIDが10014の場合、コマンドは次のようになります。
kill -2 10014
シグナルで停止するために、MongoDBの公式ドキュメントに従いました。次のいずれかのコマンドを使用できます(PID Process ID
はmongod
プロセスのを表します)。
kill PID
シグナル15(SIGTERM)を送信する、または
kill -2 PID
シグナル2(SIGINT)を送信します。
MongoDBドキュメントからの警告:インスタンスを終了するために
決して使用しないでくださいkill -9
(つまり、SIGKILL)mongod
。
複数のインスタンスを実行している場合、またはPIDを気にしない場合は、使用pkill
して、実行中のすべてのmongod
プロセスに信号を送信できます。
pkill mongod
または
pkill -2 mongod
または、より安全なのは、自分に属するプロセスのみです。
pkill -U $USER mongod
または
pkill -2 -U $USER mongod
PS
注:mongod --shutdown
現在のMongoDBのドキュメントに記載されていますが、不思議なことに私のマシンでは動作しません(macOS、mongodb v3.4.10、と一緒にインストールhomebrew
)。
Error parsing command line: unrecognised option '--shutdown'
PPS
誰も不思議になる前に(MacOSの特異的):いいえ、私はコマンドでそれを止めることができなかった
brew services stop mongodb
私はそれを起動していなかったので
brew services start mongodb
。
私はmongod
カスタムコマンドラインで始めていました:-)
私の特別なケースは:
以前にmongodを起動するには:
sudo -u mongod mongod -f /etc/mongod.conf
今、止めたいmongod
。
公式ドキュメントStop mongod Processesを参照してください:
(1)shutdownServer
が失敗:
> use admin
switched to db admin
> db.shutdownServer()
2019-03-06T14:13:15.334+0800 E QUERY [thread1] Error: shutdownServer failed: {
"ok" : 0,
"errmsg" : "shutdown must run from localhost when running db without auth",
"code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.shutdownServer@src/mongo/shell/db.js:302:1
@(shell):1:1
(2)--shutdown
まだ失敗:
# mongod --shutdown
There doesn't seem to be a server running with dbpath: /data/db
(3)--shutdownを追加する前の起動コマンド:
sudo -u mongod mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
failed to kill process: errno:1 Operation not permitted
(4)service
停止に使用:
service mongod stop
そして
service mongod status
予想どおりですActive: inactive (dead)
が、mongod
実際にはまだ実行中です。psからのプロセスを確認できます。
# ps -edaf | grep mongo | grep -v grep
root 30213 1 0 Feb04 ? 03:33:22 mongod --port PORT --dbpath=/var/lib/mongo
そして最後に、本当にmongodを止めます:
# sudo mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
これまで、根本的な原因:まだ不明...
上記の解決策があなたの役に立つことを願っています。
mongostop.batというファイルを作成します
その中に次のコードを保存します
mongo admin --eval "db.shutdownServer()"
mongostop.batファイルを実行すると、mongoが正常に停止します
コマンドラインを使用してmongodbサービスを開始または停止する1つのライナー。
NET START MONGODB
NET STOP MONGODB
私はこれを自分で使っていますが、うまくいきます。
stennieからの答えに基づいて構築:
mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"
mongoがサーバーのシャットダウン後にdbに再接続しようとしていることがわかりました。これにより、遅延とエラーメッセージが発生します。シャットダウン後にquit()を追加すると速度が上がり、メッセージが減りますが、まだあります。
コンテキストも追加したい-他のコードのテストケースの一部としてmongodを開始および停止しているため、サービスとしての登録はユースケースに適合しません。私はすべてのプラットフォームで動作するものになることを期待しています(これは現在Windowsでテストされています)。私はmongod 3.6.9を使用しています
自作の使用(推奨される方法):
始めること:
brew services start mongodb-community
止まる:
brew services stop mongodb-community
私はこの起動スクリプトをUbuntuで使用しています。
#!/bin/sh
### BEGIN INIT INFO
# Provides: mongodb
# Required-Sart:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: mongodb
# Description: mongo db server
### END INIT INFO
. /lib/lsb/init-functions
PROGRAM=/opt/mongo/bin/mongod
MONGOPID=`ps -ef | grep 'mongod' | grep -v grep | awk '{print $2}'`
test -x $PROGRAM || exit 0
case "$1" in
start)
log_begin_msg "Starting MongoDB server"
ulimit -v unlimited.
ulimit -n 100000
/opt/mongo/bin/mongod --fork --quiet --dbpath /data/db --bind_ip 127.0.0.1 --rest --config /etc/mongod.conf.
log_end_msg 0
;;
stop)
log_begin_msg "Stopping MongoDB server"
if [ ! -z "$MONGOPID" ]; then
kill -15 $MONGOPID
fi
log_end_msg 0
;;
status)
;;
*)
log_success_msg "Usage: /etc/init.d/mongodb {start|stop|status}"
exit 1
esac
exit 0
PowerShellでは、次のようになります。 Stop-Service MongoDB
次に、それを再開するには: Start-Service MongoDB
起動したかどうかを確認するには、次のコマンドを実行しますnet start | findstr MongoDB
。
注:上記では、MongoDBがサービスとして登録されていることを前提としています。
sudo service mongodb [start|stop|restart|status]
。sudo service stop mongodb
結果:停止:認識されないサービス