1つのコマンドでmongo DBを停止する方法


159

CLIでMongoDBを開始/停止できるようにする必要があります。始めるのはとても簡単です:

./mongod

しかし、mongo DBを停止するには、最初にopen mongo shellを実行してから、2つのコマンドを入力する必要があります。

$ ./mongo

管理者を使用

db.shutdownServer()

そのため、mongo DBを1行で停止する方法がわかりません。何か助け?

回答:


226

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

またはRed Hatベースのシステム:

  • service mongod stop

または、Windowsで次の名前のサービスとしてインストールした場合MongoDB

  • net stop MongoDB

サービスとしてインストールされていない場合(Windows 7以降)、次のコマンドを実行できます。

  • taskkill /f /im mongod.exe

クリーンシャットダウンの問題、そのようなシナリオを回避する最良の方法、およびクリーンシャットダウンが発生した場合の対処方法の詳細については、「予期しないシャットダウン後のデータの回復」を参照してください。


5
サービスの注文はだと思いますsudo service mongodb [start|stop|restart|status]sudo service stop mongodb結果:停止:認識されないサービス
jacob 2013

2
@Jacob-これはubuntuで試したところです。そうです、私は回答を編集しました。
Andrew M

5
Macの場合は、「killall mongod」を実行することもできます。そうすれば、PIDを知る必要はありません。
Jon M

2
またはMacの場合: 'ps -ax | grep mongod '、次にプロセス番号をkillします
Bryan Grace

1
新しいUbuntu 18.04では、> sudo service mongod stop ...ではなく「mongodb」を使用して停止できます
Naseef Ummer

101

文字通り、元の質問のコマンドと同等の1行が必要な場合は、次のように別名を付けることができます。

mongo --eval "db.getSiblingDB('admin').shutdownServer()"

サービスを介したMongoDBの開始と停止に関するMarkの答えは、より一般的な(そして推奨される)管理アプローチです。


3
すばらしい答えです。開発マシンで複数のインスタンスをセットアップする場合(デプロイメントの前にレプリケーションセットを試す)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 ...
、. batを用意し

2
サービスとしてインストールされているWindowsでは、これnet stop MongoDBは信頼できないため、同様の方法を使用しましたmongo admin --eval "db.shutdownServer()"。乾杯!
NateJ

1
@Stennie Windowsで「net stop MongoDB」を使用すると、「システムエラー1067が発生しました」と表示されます
charan tej

48

mongod --dbpath /path/to/your/db --shutdown

公式の詳細情報:http : //docs.mongodb.org/manual/tutorial/manage-mongodb-processes/


私はこの方法を使用するのが大好きです。dbpathがなくても機能します。インスタンスを1つだけ実行している場合は理にかなっています。
radtek、2014年

2
2.4.xxから最新までの新しいバージョンでは機能しないようです。
alexserver 2014年

これが、実際に機能した唯一の回答です。
David Betz 2016

6
macOS 10.12 、mongod v3.4.10: Error parsing command line: unrecognised option '--shutdown':-(
t0r0X 2017年

レプリカセットのプライマリで実行された場合、これについて定義された動作はありますか?db.shutdownServer({force:1,timeoutSecs:0})残りのデータのセカンダリへのフラッシュを禁止するように動作するようです。あなたはいつもそれを望んでいないかもしれません。
ダニエルF

30

サーバーがターミナルでフォアグラウンドプロセスとして実行されている場合、これは

Ctrl-C

実行中のサーバーを正常にシャットダウンする別の方法は、shutdownコマンドを使用することです。

> use admin
> db.shutdownServer();

それ以外の場合は、killなどのコマンドを使用してシグナルを送信できます。mongodのPIDが10014の場合、コマンドは次のようになります。

kill -2 10014

3
killを使用するのは良い考えではありません。これにより、DBが破損し、再起動するために修復が必要になる可能性があります。「kill -9(つまりSIGKILL)を使用して、mongodインスタンスを終了しないでください。」ドキュメント:docs.mongodb.org/manual/tutorial/manage-mongodb-processes/...
イェンス・A.コッホ

7
@ JensA.Koch Ya、Nanheは-9信号を使用するように誰にも言っていなかったので、「killを使用するのは良い考えではない」と言っても、正確ではありません。即時終了のみが安全ではありません-通常の強制終了は完全に安全であり、リンクしたドキュメントはそれを支持しています。
BT

18

シグナルで停止するために、MongoDBの公式ドキュメントに従いました。次のいずれかのコマンドを使用できます(PID Process IDmongodプロセスのを表します)。

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カスタムコマンドラインで始めていました:-)


すばらしい回答です。MongoDBはSIGTERMシグナルを使用して正常に終了できることが確認されました。DockerでMongoDBを実行する場合は、docs.docker.com/compose/compose - file/#stop_grace_periodが重要です。CMD ["mongod"、 "option"、 "option"]を使用して、MongoDBが確実にPID 1を取得し、Dockerから送信されたシグナルがDBに到達するようにする必要があることにも注意してください。
laimison

9

使用する mongod --shutdown

公式ドキュメントによると:manage-mongodb-processes /

:D


これは私が探していたものです。どうもありがとう。
Gaurav Sharma

プロセスの強制終了に失敗しました:errno:1操作は許可されていません。
htm11h 2017年


これは私のためだけに働きました。mongodをサービスとして使用しておらず、開始コマンドでエラーが表示されました。mongodのインスタンスがすでに実行されています。トンありがとう、男!
Sanjeet A

8

私の特別なケースは:

以前に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

これまで、根本的な原因:まだ不明...

上記の解決策があなたの役に立つことを願っています。


6

mongostop.batというファイルを作成します

その中に次のコードを保存します

 mongo admin --eval "db.shutdownServer()"

mongostop.batファイルを実行すると、mongoが正常に停止します


4

コマンドラインを使用してmongodbサービスを開始または停止する1つのライナー。

  1. サービスを開始するには: NET START MONGODB
  2. サービスの使用を停止するには: NET STOP MONGODB

私はこれを自分で使っていますが、うまくいきます。


Windowsでこれらのコマンドを使用すると次のようになります。c:\ mongodb \ bin> NET START MONGODBサービス名が無効です。NET HELPMSG 2185と入力すると、さらにヘルプが表示されます。c:\ mongodb \ bin> NET STOP MONGODBサービス名が無効です。NET HELPMSG 2185と入力すると、さらにヘルプが表示されます

Windowsでは、最初に--installオプションを使用してサービスとしてmongodbをインストールする必要があります。次のようなコマンドを使用して、サービスとしてインストールできます。mongod --install --directoryperdb --dbpath C:\ mongodb-win32-x86_64-2.4.6 \ data --logpath C:\ mongodb-win32-x86_64-2.4.6 \ log \ mongodb.log --logappend-上記のコマンドは、管理者権限で実行する必要があります。その後、Hugoが提供するnet startコマンドとnet stopコマンドを使用できます。
Ed Ost 2013

3

与えられたコマンドから、私はあなたがLinuxを使っていると思います。

MongoDBを起動します。

$ sudo service mongod start
mongod start/running, process XXXXX 

ステータスを確認します。

$ sudo service mongod status
mongod start/running, process XXXXX 

MongoDBを停止します。

$ sudo service mongod stop
mongod stop/waiting 

2

stennieからの答えに基づいて構築:

mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"

mongoがサーバーのシャットダウン後にdbに再接続しようとしていることがわかりました。これにより、遅延とエラーメッセージが発生します。シャットダウン後にquit()を追加すると速度が上がり、メッセージが減りますが、まだあります。

コンテキストも追加したい-他のコードのテストケースの一部としてmongodを開始および停止しているため、サービスとしての登録はユースケースに適合しません。私はすべてのプラットフォームで動作するものになることを期待しています(これは現在Windowsでテストされています)。私はmongod 3.6.9を使用しています



1

Macのターミナルウィンドウで、Ctrl + Cキーを押します


誰かがこれに反対票を投じました。これは実際、mongoのドキュメントに従ってmongoを停止する方法の1つです。mongoはバックグラウンドやデーモンとしてではなく、そのターミナルで実行する必要があるため、ほとんどの状況ではこれは機能しませんが、「時々」このソリューションは機能します。
反対票を投じる

1

自作の使用(推奨される方法):

始めること:

brew services start mongodb-community

止まる:

brew services stop mongodb-community


0

私はこの起動スクリプトを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

2
だから、mongoDBを直接殺すだけですよね?私はMongoDBの初心者ですが、それを殺すのに害はありますか?SQLServerまたはOracleの場合、私たちがそれらを強制終了した場合、問題が発生することはわかっています。
XiaoYao

殺すことは-9ですが、-15 uは信号を送信します。
ボリスイワノフ


0

OSが提供するタスクマネージャーを利用して、すばやく簡単なソリューションを作成してください。以下は、Windows 10の/のスクリーングラブです。強調表示されたプロセスを右クリックして、停止を選択します。すでに停止している場合は、開始を選択します。

ここに画像の説明を入力してください

注:内部的に、コマンドは、Windows / OSによって提供されるGUI(タスクマネージャー)を使用して手動で実行する必要があるのと同じことを実行しています。しかし、このアプローチは、開始するための研究/実践目的で使用され、これによりブロックされることはありません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.