MongoDB Run As a Service
- If you are installing mongodb with the default installer like yum or with rpm, by default the init.d scripts will be generated for mongo and the service commands also will be in place
- But if you are installing mongodb with tarball or binary installer, there will not be any init scripts and service commands will not work as well.
Example:
Here am
gonna show you how to run mongodb as a service with tarball or binary
installation.
Rules:
- There should be mongod script placed in /etc/init.d/mongod
- All files in db_path, logpath, binary path, config file path should be in the ownership of mongod (user and group)
Paths:
The below
mentioned paths may change based on your installation, but mongod script path should
the same as given below.
Mongod script path - /etc/init.d/mongod
Binary path - /data/mongodb-3.2.18/bin/mongod
Config file path - /data/config/mongod.conf
You don want
to worry about the below given script, as we gonna change only to path variable
in the script.
Sample Config File:
net:
port: 27019
processManagement:
pidFilePath: /var/run/mongodb/mongod.pid
fork: true
sharding:
clusterRole: shardsvr
replication:
replSetName: rs_0
storage:
dbPath: /data/usr/mongod_data
systemLog:
destination: file
logAppend: true
logRotate: rename
path: /data/usr/logs/mongod.log
Sample Config File:
net:
port: 27019
processManagement:
pidFilePath: /var/run/mongodb/mongod.pid
fork: true
sharding:
clusterRole: shardsvr
replication:
replSetName: rs_0
storage:
dbPath: /data/usr/mongod_data
systemLog:
destination: file
logAppend: true
logRotate: rename
path: /data/usr/logs/mongod.log
mongod script:
#!/bin/bash
# mongod -
Startup script for mongod
# chkconfig:
35 85 15
#
description: Mongo is a scalable, document-oriented database.
#
processname: mongod
# config:
/etc/mongod.conf
.
/etc/rc.d/init.d/functions
# NOTE: if
you change any OPTIONS here, you get what you pay for:
# this
script assumes all options are in the config file.
CONFIGFILE="/data/config/mongod.conf"
OPTIONS="
-f $CONFIGFILE"
mongod=${MONGOD-/data/mongodb-3.2.18/bin/mongod}
MONGO_USER=mongod
MONGO_GROUP=mongod
# All
variables set before this point can be overridden by users, by
# setting
them directly in the SYSCONFIG file. Use this to explicitly
# override
these values, at your own risk.
SYSCONFIG="/etc/sysconfig/mongod"
if [ -f
"$SYSCONFIG" ]; then
. "$SYSCONFIG"
fi
# Handle
NUMA access to CPUs (SERVER-3574)
# This
verifies the existence of numactl as well as testing that the command works
NUMACTL_ARGS="--interleave=all"
if which
numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls /
>/dev/null 2>/dev/null
then
NUMACTL="numactl $NUMACTL_ARGS"
else
NUMACTL=""
fi
# things
from mongod.conf get there by mongod reading it
PIDFILEPATH=`awk
-F'[:=]' -v IGNORECASE=1
'/^[[:blank:]]*(processManagement\.)?pidfilepath[[:blank:]]*[:=][[:blank:]]*/{print
$2}' "$CONFIGFILE" | tr -d "[:blank:]\"'" | awk -F'#'
'{print $1}'`
PIDDIR=`dirname
$PIDFILEPATH`
start()
{
# Make sure the default pidfile directory
exists
if [ ! -d $PIDDIR ]; then
install -d -m 0755 -o $MONGO_USER -g
$MONGO_GROUP $PIDDIR
fi
# Make sure the pidfile does not exist
if [ -f $PIDFILEPATH ]; then
echo "Error starting mongod.
$PIDFILEPATH exists."
RETVAL=1
return
fi
# Recommended ulimit values for mongod or
mongos
# See
http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
#
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000
echo -n $"Starting mongod: "
daemon --user "$MONGO_USER" --check
$mongod "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch
/var/lock/subsys/mongod
}
stop()
{
echo -n $"Stopping mongod: "
mongo_killproc "$PIDFILEPATH"
$mongod
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f
/var/lock/subsys/mongod
}
restart () {
stop
start
}
# Send TERM
signal to process and wait up to 300 seconds for process to go away.
# If process
is still alive after 300 seconds, send KILL signal.
# Built-in
killproc() (found in /etc/init.d/functions) is on certain versions of Linux
# where it
sleeps for the full $delay seconds if process does not respond fast enough to
# the
initial TERM signal.
mongo_killproc()
{
local pid_file=$1
local procname=$2
local -i delay=300
local -i duration=10
local pid=`pidofproc -p
"${pid_file}" ${procname}`
kill -TERM $pid >/dev/null 2>&1
usleep 100000
local -i x=0
while [ $x -le $delay ] && checkpid
$pid; do
sleep $duration
x=$(( $x + $duration))
done
kill -KILL $pid >/dev/null 2>&1
usleep 100000
checkpid $pid # returns 0 only if the process
exists
local RC=$?
[ "$RC" -eq 0 ] && failure
"${procname} shutdown" || rm -f "${pid_file}"; success
"${procname} shutdown"
RC=$((! $RC)) # invert return code so we
return 0 when process is dead.
return $RC
}
RETVAL=0
case
"$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/mongod ] &&
restart || :
;;
status)
status $mongod
RETVAL=$?
;;
*)
echo "Usage: $0
{start|stop|status|restart|reload|force-reload|condrestart}"
RETVAL=1
esac
exit $RETVAL
Path Variable to be changed for your
installation:
The above
mentioned are the two variables to be take care in the entire script
Just change
the config file path and the binary path, the given script will work for most
of the binary installations.
After doing
this the service commands will work for you,
- Start – sudo service mongod start
- Stop – sudo service mongod stop
- Restart - sudo service mongod restart
Start:
# sudo service mongod start
When we checked
the process, it’s not running but when we trigged the command – the mongo
process automatically started.
Stop:
# sudo service
mongod stop
Here when we
checked the process, its already running but when we triggered the command it
stopped.
Restart:
# sudo service mongod restart
As same as
start and stop, its restarted.
Done…
No comments:
Post a Comment