123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #!/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="/etc/mongod.conf"
- OPTIONS=" -f $CONFIGFILE"
- mongod=${MONGOD-/usr/local/mongodb/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
- ulimit -l unlimited
- 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
|