107

i'm running mongo 1.8.2 and trying to see how to cleanly shut it down on Mac.

on our ubuntu servers i can shutdown mongo cleanly from the mongo shell with:

> use admin
> db.shutdownServer()

but on my Mac, it does not kill the mongod process. the output shows that it 'should be' shutdown but when i ps -ef | grep mongo it shows me an active process. also, i can still open a mongo shell and query my dbs like it was never shutdown.

the output from my db.shutdownServer() locally is:

MongoDB shell version: 1.8.2
connecting to: test
> use admin                  
switched to db admin
> db.shutdownServer()
Tue Dec 13 11:44:21 DBClientCursor::init call() failed
Tue Dec 13 11:44:21 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Tue Dec 13 11:44:21 trying reconnect to 127.0.0.1
Tue Dec 13 11:44:21 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1
Tue Dec 13 11:44:21 Error: error doing query: unknown shell/collection.js:150

i know i can just kill the process but i'd like to do it more cleanly.

Rafa Viotti
  • 9,998
  • 4
  • 42
  • 62
emilebaizel
  • 4,505
  • 5
  • 27
  • 20
  • How have you started `mongod`? Just at the shell? Using `launchctl`? – dcrosta Dec 13 '11 at 20:01
  • Do you have any information from the logs? It could be that MongoDB is "auto-restarting". You may want to run with `--logappend`, though a brand new log file is a clear indication that the process restarted. – Gates VP Dec 13 '11 at 21:29

9 Answers9

215

It's probably because launchctl is managing your mongod instance. If you want to start and shutdown mongod instance, unload that first:

launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

Then start mongod manually:

mongod -f path/to/mongod.conf --fork

You can find your mongod.conf location from ~/Library/LaunchAgents/org.mongodb.mongod.plist.

After that, db.shutdownServer() would work just fine.

Added Feb 22 2014:

If you have mongodb installed via homebrew, homebrew actually has a handy brew services command. To show current running services:

brew services list

To start mongodb:

brew services start mongodb-community

To stop mongodb if it's already running:

brew services stop mongodb-community

Update*

As edufinn pointed out in the comment, brew services is now available as user-defined command and can be installed with following command: brew tap gapple/services.

James Chen
  • 10,794
  • 1
  • 41
  • 38
  • 24
    In case anyone is interested, currently, if you have mongodb installed via homebrew you would actually need to do `launchctl stop homebrew.mxcl.mongodb` to stop mongodb. – Tyler Brock Feb 25 '13 at 03:44
  • 3
    As Sep. 2014, there is a deprecation notice in `brew` regarding `brew services`: `$ brew services Warning: brew services is unsupported and will be removed soon.` – Pablo Navarro Sep 02 '14 at 21:52
  • 3
    As Dec. 2014, `brew services` has been removed. `$ brew services Error: Unknown command: services` – hughes Dec 12 '14 at 20:05
  • 6
    `brew services` is now available as user-defined command and can be installed with following command: `brew tap gapple/services`. – edufinn Feb 23 '15 at 10:39
  • I can get `brew services` with `brew tap gapple/services`, but after `brew services start mongodb` I see `...==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)` while in fact the process isn't running (as verified by trying to do something on the db), and `brew services list` gives me `Warning: No user-space services controlled by `brew services` running...`. The `launchctl` suggestions below aren't working for me either. So these techniques unfortunately don't work any more. – Marshall Farrier Mar 13 '15 at 23:00
  • @James brew service start/stop command is just so clean and brilliant.. Thank you – pravin Nov 27 '15 at 11:40
  • 1
    After I start the mongodb service, my node server is unable to connect to it. However if I start the mongodb from command line, it works fine. I guess it must be port issue.. How to set the port when starting the service ? – pravin Nov 27 '15 at 15:25
  • FYI I installed MongDB recently on my Mac OS and could not find based on name `mongodb`. I had to install via `brew install mongodb-community`. Not sure what the story is behind this, maybe they renamed it or something. ```$ brew search mongodb ==> Formulae mongodb/brew/mongodb-community ✔ mongodb/brew/mongodb-community@3.4 mongodb/brew/mongodb-community-shell mongodb/brew/mongodb-community@3.6 mongodb/brew/mongodb-community@3.2 mongodb/brew/mongodb-community@4.0 ...``` Then I could start/stop via `brew services start/stop mongodb-community` – Jose Quijada Jan 14 '20 at 20:33
  • The start command is wrong in the post. It should be `brew services start mongodb-community` not `stop` – Spark Dec 07 '20 at 13:28
47

If you installed mongodb with homebrew, there's an easier way:

List mongo job with launchctl:

launchctl list | grep mongo

Stop mongo job:

launchctl stop <job label>

(For me this is launchctl stop homebrew.mxcl.mongodb)

Start mongo job:

launchctl start <job label>
Raphael
  • 1,701
  • 15
  • 26
28

Simple way is to get the process id of mongodb and kill it. Please note DO NOT USE kill -9 pid for this as it may cause damage to the database.

so, 1. get the pid of mongodb

$ pgrep mongo

you will get pid of mongo, Now

$ kill

You may use kill -15 as well

26

If you have installed mongodb community server via homebrew, then you can do:

brew services list

This will list the current services as below:

Name              Status  User          Plist
mongodb-community started <your_user_name> /Users/<your_user_name>/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

redis             stopped

Then you can restart mongodb by first stopping and restart:

brew services stop mongodb
brew services start mongodb
the_haystacker
  • 1,585
  • 18
  • 20
5

I prefer to stop the MongoDB server using the port command itself.

sudo port unload mongodb

And to start it again.

sudo port load mongodb
Rafa Viotti
  • 9,998
  • 4
  • 42
  • 62
4

Check out these docs:

http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo#StartingandStoppingMongo-SendingaUnixINTorTERMsignal

If you started it in a terminal you should be ok with a ctrl + 'c' -- this will do a clean shutdown.

However, if you are using launchctl there are specific instructions for that which will vary depending on how it was installed.

If you are using Homebrew it would be launchctl stop homebrew.mxcl.mongodb

Tyler Brock
  • 29,626
  • 15
  • 79
  • 79
3

The solutions provided by others used to work for me but is not working for me anymore, which is as below.

brew services stop mongodb
brew services start mongodb

brew services list gives

Name              Status  User      Plist
mongodb-community started XXXXXXXXX /Users/XXXXXXXXX/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

So I used mongodb-community instead of mongodb which worked for me

brew services stop mongodb-community
brew services start mongodb-community
Arnold Parge
  • 6,684
  • 2
  • 30
  • 34
1

This is an old question, but its one I found while searching as well.

If you installed with brew then the solution would actually be the this:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

0

If the service is running via brew, you can stop it using the following command:

brew services stop mongodb
KayV
  • 12,987
  • 11
  • 98
  • 148