mongodbsystemdupstartrhel7start-stop-daemon

RHEL7 systemd start mongo services automatically?


I have a RHEL7 server that is part of a Mongo cluster. There are three mongo processes that I would like to be automatically started on system boot. One mongod, one arbiter and one mongos:

I have been trying to create systemd services for these commands i.e

[Unit]
Description=mongo configuration server
After=network.target

[Service]
User=mongod
Group=mongod
ExecStart=/usr/bin/mongod -f /etc/mongoconf.conf

[Install]
WantedBy=multi-user.target

When I try to do sudo systemctl daemon-reload && sudo systemctl start mongoconf, I get this error

ā— mongoconf.service - mongo configuration server
   Loaded: loaded (/etc/systemd/system/mongoconf.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2017-02-02 14:38:34 AWST; 20s ago
  Process: 5114 ExecStart=/usr/bin/mongod -f /etc/mongoconf.conf (code=exited, status=1/FAILURE)
 Main PID: 5114 (code=exited, status=1/FAILURE)

Feb 02 14:38:34 mdb1 systemd[1]: Started mongo configuration server.
Feb 02 14:38:34 mdb1 systemd[1]: Starting mongo configuration server...
Feb 02 14:38:34 mdb1 systemd[1]: mongoconf.service: main process exited, code=exited, status=1/FAILURE
Feb 02 14:38:34 mdb1 systemd[1]: Unit mongoconf.service entered failed state.
Feb 02 14:38:34 mdb1 systemd[1]: mongoconf.service failed.

I have also tried using a forked type with pid file:

[Unit]
Description=mongo configuration server
After=network.target

[Service]
User=mongod
Group=mongod
ExecStart=/usr/bin/mongod -f /etc/mongoconf.conf --pidfilepath /var/lib/mongoconf/pid --fork
Type=forking
PIDFile=/var/run/mongodb/mongoconf/pid

[Install]
WantedBy=multi-user.target

But gives this error

ā— mongoconf.service - mongo configuration server
   Loaded: loaded (/etc/systemd/system/mongoconf.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2017-02-02 14:45:36 AWST; 4s ago
  Process: 5256 ExecStart=/usr/bin/mongod -f /etc/mongoconf.conf --pidfilepath /var/lib/mongoconf/pid --fork (code=exited, status=1/FAILURE)
 Main PID: 5114 (code=exited, status=1/FAILURE)

Feb 02 14:45:36 mdb1 systemd[1]: Starting mongo configuration server...
Feb 02 14:45:36 mdb1 mongod[5256]: about to fork child process, waiting until server is ready for connections.
Feb 02 14:45:36 mdb1 mongod[5256]: forked process: 5258
Feb 02 14:45:36 mdb1 systemd[1]: mongoconf.service: control process exited, code=exited status=1
Feb 02 14:45:36 mdb1 systemd[1]: Failed to start mongo configuration server.
Feb 02 14:45:36 mdb1 systemd[1]: Unit mongoconf.service entered failed state.
Feb 02 14:45:36 mdb1 systemd[1]: mongoconf.service failed.

Starting the mongo config manually works fine and creates the pid file

/usr/bin/mongod -f /etc/mongoconf.conf --pidfilepath /var/lib/mongoconf/pid --fork

The version of mongod I am using is the one from mongodb.com, and I installed it following their install guide.

db version v3.4.1
git version: 5e103c4f5583e2566a45d740225dc250baacfbd7
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel70
    distarch: x86_64
    target_arch: x86_64

from this repo

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

I am wondering if I am going about this the wrong way, is there a better way to do this?


Solution

  • Here is my solution

    make a bash script with these lines

    /usr/bin/mongod -f /etc/mongo_shard001.conf
    /usr/bin/mongod -f /etc/mongoarb.conf
    /usr/bin/mongos -f /etc/mongos.conf
    

    and then add this line to your crontab

    @reboot root cd /foldername && ./scriptname.sh
    

    systemd would be a better solution, if anyone knows how to set it up.

    the mongo documentation is no help