Created
February 11, 2015 02:54
-
-
Save jasoares/4427bb714aa266c300e7 to your computer and use it in GitHub Desktop.
mongod arbiter separate init script for separate bin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # How to use | |
| # | |
| # * make a copy of the mongod binary on /usr/bin/mongod | |
| # `sudo cp /usr/bin/mongod /usr/bin/mongodarb` | |
| # * copy this init script inside /etc/init.d/mongodarb | |
| # * assumes the arbiter process config file is on /etc/mongodarb.conf | |
| # * reset chkconfig with: | |
| # `sudo chkconfig mongodarb reset` | |
| # | |
| # tweaked to start before other mongod processes avoiding | |
| # the wait for them to load data | |
| # requires separate sysconfig file on /etc/sysconfig/mongodarb | |
| # and also a separate lock file /var/lock/subsys/mongodarb. | |
| # mongodarb - Startup script for mongod arbiter | |
| # chkconfig: 2345 80 20 | |
| # description: Mongo is a scalable, document-oriented database. | |
| # processname: mongodarb | |
| # config: /etc/mongodarb.conf | |
| # pidfile: /var/run/mongodb/mongodarb.pid | |
| . /etc/rc.d/init.d/functions | |
| # things from mongod.conf get there by mongod reading it | |
| # 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/mongodarb.conf" | |
| OPTIONS=" -f $CONFIGFILE" | |
| SYSCONFIG="/etc/sysconfig/mongodarb" | |
| DBPATH=`awk -F'[:=]' -v IGNORECASE=1 '/^[[:blank:]]*dbpath[[:blank:]]*[:=][[:blank:]]*/{print $2}' "$CONFIGFILE" | tr -d '[:blank:]'` | |
| PIDFILEPATH=`awk -F'[:=]' -v IGNORECASE=1 '/^[[:blank:]]*pidfilepath[[:blank:]]*[:=][[:blank:]]*/{print $2}' "$CONFIGFILE" | tr -d '[:blank:]'` | |
| PIDDIR=`dirname $PIDFILEPATH` | |
| mongod=${MONGOD-/usr/bin/mongodarb} | |
| MONGO_USER=mongod | |
| MONGO_GROUP=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 | |
| start() | |
| { | |
| # Make sure the default pidfile directory exists | |
| if [ ! -d $PIDDIR ]; then | |
| install -d -m 0755 -o $MONGO_USER -g $MONGO_GROUP $PIDDIR | |
| 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 32000 | |
| echo -n $"Starting mongod: " | |
| daemon --user "$MONGO_USER" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1" | |
| RETVAL=$? | |
| echo | |
| [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mongodarb | |
| } | |
| stop() | |
| { | |
| echo -n $"Stopping mongod: " | |
| mongo_killproc "$PIDFILEPATH" $mongod | |
| RETVAL=$? | |
| echo | |
| [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/mongodarb | |
| } | |
| 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 | |
| rm -f "${pid_file}" | |
| checkpid $pid | |
| local RC=$? | |
| [ "$RC" -eq 0 ] && failure "${procname} shutdown" || success "${procname} shutdown" | |
| RC=$((! $RC)) | |
| return $RC | |
| } | |
| RETVAL=0 | |
| case "$1" in | |
| start) | |
| start | |
| ;; | |
| stop) | |
| stop | |
| ;; | |
| restart|reload|force-reload) | |
| restart | |
| ;; | |
| condrestart) | |
| [ -f /var/lock/subsys/mongodarb ] && restart || : | |
| ;; | |
| status) | |
| status $mongod | |
| RETVAL=$? | |
| ;; | |
| *) | |
| echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}" | |
| RETVAL=1 | |
| esac | |
| exit $RETVAL |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment