I can start MongoDB as $sudo service mongod start
. When I start without sudo
it gives me this error:
/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users
1) Now, I've changed ownership to the non root user on all mongo directores I could find i.e. /var/lib/mongo
, var/log/mongodb
, data/db
, var/run/mongodb
$sudo chown -R nonRootUser:nonRootUser [directory]
2) I've deleted mongod.lock
files
3) I've run --repair
too
It still gives me the same error.
I also tried
$mongod --fork --logpath /var/log/mongodb.log
about to fork child process, waiting until server is ready for connections.
forked process: 18566
ERROR: child process failed, exited with error number 1
mongod.log file says this:
2016-03-17T15:03:49.053+0000 I NETWORK [initandlisten] waiting for connections on port 27017
2016-03-17T15:03:54.144+0000 I CONTROL [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
It's Amazon Linux. I am able to start it like this $mongod, but I want to run it as daemon so it runs continuously.
The nonRootUser is a new user I created in addition to ec2-user. Maybe there are some config issues relating to running daemon processes if you're not ec2-user?
UPDATE: Changed ownership on everything to ec2-user, still getting exactly the same errors as before.
Best Answer
You mention that you used the
rpm
installer for installing MongoDB on the Amazon Linux AMI. When you do this, themongod
user is created on the system and all of the appropriate files are created and owned by themongod
user. When starting MongoDB installed by therpm
, the command must either be run byroot
or run usingsudo
. This is because the init script must execute a change user command so themongod
process can be forked as a child of themongod
user.Failure to use
root
orsudo
to start the service results in the errors you quoted above.So, in order to run as a service, you must use
sudo
orroot
. There is no simple way around this except granting themongod
user a shell, assigning it a password, logging in as that user, then running the service. This will still result in errors attempting to modify theulimits
and is generally not recommended.To start MongoDB without running it as a service, since you used the
rpm
, themongod
binary should be in your path, so the following should workNote that doing this will run it as the currently logged in user, that means all of the data files as well as
mongod.log
must be writable by that user. Ideally, these files should be owned by that user.