snippetMinor
How to run MongoDB as a non root user in Linux?
Viewed 0 times
nonusermongodbrootlinuxhowrun
Problem
I can start MongoDB as
1) Now, I've changed ownership to the non root user on all mongo directores I could find i.e.
2) I've deleted
3) I've run
It still gives me the same error.
I also tried
mongod.log file says this:
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.
$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 users1) 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 tooIt 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 1mongod.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 endsIt'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.
Solution
UPDATE
This answer is extremely old and covers old versions of MongoDB which using
OLD ANSWER
You mention that you used the
Failure to use
So, in order to run as a service, you must use
To start MongoDB without running it as a service, since you used the
Note that doing this will run it as the currently logged in user, that means all of the data files as well as
This answer is extremely old and covers old versions of MongoDB which using
init scripts. For systemd systems, see the answer below by Wernfried Domscheit.OLD ANSWER
You mention that you used the
rpm installer for installing MongoDB on the Amazon Linux AMI. When you do this, the mongod user is created on the system and all of the appropriate files are created and owned by the mongod user. When starting MongoDB installed by the rpm, the command must either be run by root or run using sudo. This is because the init script must execute a change user command so the mongod process can be forked as a child of the mongod user.Failure to use
root or sudo to start the service results in the errors you quoted above./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 usersSo, in order to run as a service, you must use
sudo or root. There is no simple way around this except granting the mongod 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 the ulimits and is generally not recommended.To start MongoDB without running it as a service, since you used the
rpm, the mongod binary should be in your path, so the following should workmongod --dbpath /path/to/data --logpath /path/to/mongod.log --forkNote 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.Code Snippets
/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 usersmongod --dbpath /path/to/data --logpath /path/to/mongod.log --forkContext
StackExchange Database Administrators Q#132544, answer score: 5
Revisions (0)
No revisions yet.