97

i found this error when trying to run mongodb. I install it via homebrew. Please assist

Agungs-MacBook-Pro:~ agungmahaputra$ mongod
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] MongoDB starting : pid=5189 port=27017 dbpath=/data/db 64-bit host=Agungs-MacBook-Pro.local
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] db version v3.6.0
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2n  7 Dec 2017
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] allocator: system
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] modules: none
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] build environment:
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten]     distarch: x86_64
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten]     target_arch: x86_64
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] options: {}
2017-12-26T15:31:15.911+0700 E STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] now exiting
2017-12-26T15:31:15.911+0700 I CONTROL  [initandlisten] shutting down with code:48
Agungs-MacBook-Pro:~ agungmahaputra$
Agung Maha
  • 1,075
  • 1
  • 8
  • 5

11 Answers11

143

You can kill the previous mongod instance and start the new one.

To kill the previous mongod instance, first search for a list of tasks running on your machine by typing,

sudo lsof -iTCP -sTCP:LISTEN -n -P

Search for mongod COMMAND and its PID and type,

sudo kill <mongo_command_pid>

Now start your mongod instance by typing,

mongod

You can see MongoDB running successfully.

Balasubramani M
  • 7,742
  • 2
  • 45
  • 47
  • 2
    Probably would need to be modified to work on PC, but for mac this is perfect. Tnx – gush Nov 04 '18 at 08:59
  • 1
    In my case, (Centos 7 Mongo 4.0.10) The service running was the actual mongo daemon and killing it just caused a different problem. Just needed to use the 'mongo' command instead of 'mongod' – Roy Toledo May 29 '19 at 17:48
111

You already have a process running in the port 27017 which is used by mongodb. So either you need to stop the process in that port or try with different port number.

Try mongod --port 27018

You can change the port number of your choice.

EDIT:

You can also just stop all the running instances of mongo server using sudo killall mongod as mentioned by @Dassi Orleando in the comments. And run mongod

Tony Roczz
  • 2,366
  • 6
  • 32
  • 59
11

Summary other(@Tony Roczz, @Balasubramani M) answer to here:

Root Cause

error: Failed to set up listener: SocketException: Address already in use

means:

  • previously have run mongodb
    • probably use default port 27017

Solution

(most case) kill and restart mongod

kill mongod

two method:

  • use killall
    • killall mongod
  • kill by PID
    • find mongod PID
      • method 1: ps aux | grep mongod
      • output can see like this: limao 425 ... /usr/local/opt/mongodb-community/bin/mongod --config /usr/local/etc/mongod.conf
      • method 2: lsof -iTCP -sTCP:LISTEN -n -P
      • output can see like this: mongod 425 limao .. TCP 127.0.0.1:27017 (LISTEN)
    • kill by PID: kill -9 425

re-start mongod

  • most case: mongod
  • some special case
    • brew services start mongodb-community
      • for install community version in Mac by: brew install mongodb-community

(for some people) run with another port

  • run with another port: mongod --port 27018
    • only for those want to run multiple mongod server same time

Additional Note

which port the running mongodb is using?

 lsof -iTCP -sTCP:LISTEN -n -P
COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mongod      425 limao   10u  IPv4 0xab744305e75263cf      0t0  TCP 127.0.0.1:27017 (LISTEN)

can see 27017 is current running mongodb port.

how to check / make sure mongod is running

  • check mongod status:
    • ps aux | grep mongod
      • output can see mongod service
    • brew services list
      • if installed by brew and start by brew
crifan
  • 12,947
  • 1
  • 71
  • 56
7

if you're using mongodb version 4.*

in default settings, there should be a "db" folder "/data/db" having the necessary permission.

to check it the MongoDB service started

brew services list

if not then run

brew services start mongodb

run mongo instead of mongod

sh6210
  • 4,190
  • 1
  • 37
  • 27
6

I solved it pasting the command below into the command line in order to close mongo's server.

sudo pkill -f mongod

"sudo" (Super User Do) runs the command admin permissions, so it will ask you for your user password

5

First, shutdown the running server using:

mongod --shutdown

Then run:

sudo mongod
ross
  • 2,684
  • 2
  • 13
  • 22
Bisma Azher
  • 689
  • 8
  • 9
5

After running this commands below:

sudo lsof -iTCP -sTCP:LISTEN -n -P

Search for mongod COMMAND and its PID and type,

sudo kill <mongo_command_pid>

And restarting mongod, it still fails with the same error "SocketException: Address already in use MONGODB".

Server was restarted yesterday and then this happened.

jtvdw
  • 79
  • 2
  • 7
4

Just this single command

sudo pkill -f mongod

  • 2
    This is say the **same** as in the Answer by Agustín Marí. Except your answer is using bold prior to the command. – Scratte Apr 03 '20 at 11:57
2

Make Sure the error is of the port , if using macos catalina there is a reported issue for ~/data/db which also causes this.

  • yea I am having an issue where I am positive mongo isnt running but still getting this error – Dylan Dec 06 '19 at 19:50
2

If your mongod process is already down, just remove the .sock file in /tmp:

My mongod is already down, so does not appears in:

lsof -iTCP -sTCP:LISTEN -n -P

The error was:

[root@ol7db19c1 ~]# mongod -f /etc/csrs_2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 6721
ERROR: child process failed, exited with error number 48
To see additional information in this output, start without the "--fork" option.

In the log file (/var/mongodb/db/csrs2.log):

2020-07-05T16:03:59.354-0300 E  STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use

So, find for the socket locking:

ls -ltra /tmp|grep .sock

And just remove it (do it with caution in production environment):

rm -f mongodb-26002.sock

G-luck!

ilromape
  • 21
  • 2
1

This may sound obvious but you should check if mongodb is already running. So instead of first starting the the DB by running:

sudo mongod

Try directly running:

mongo
Kaane Guji
  • 115
  • 1
  • 7