Created
September 24, 2012 12:57
-
-
Save lboynton/3775818 to your computer and use it in GitHub Desktop.
CentOS memcached init script with multiple instance support
This file contains 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 | |
# | |
# chkconfig: - 55 45 | |
# description: The memcached daemon is a network memory cache service. | |
# processname: memcached | |
### END INIT INFO | |
# Usage: | |
# cp /etc/memcached.conf /etc/memcached_server1.conf | |
# cp /etc/memcached.conf /etc/memcached_server2.conf | |
# start all instances: | |
# /etc/init.d/memcached start | |
# start one instance: | |
# /etc/init.d/memcached start server1 | |
# stop all instances: | |
# /etc/init.d/memcached stop | |
# stop one instance: | |
# /etc/init.d/memcached stop server1 | |
# There is no "status" command. | |
# Source function library. | |
. /etc/rc.d/init.d/functions | |
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | |
DAEMON=/usr/bin/memcached | |
DAEMONNAME=memcached | |
DAEMONBOOTSTRAP=/usr/bin/start-memcached | |
DESC=memcached | |
test -x $DAEMON || exit 0 | |
test -x $DAEMONBOOTSTRAP || exit 0 | |
set -e | |
# Check that networking is up. | |
if [ "$NETWORKING" = "no" ] | |
then | |
exit 0 | |
fi | |
FILES=(/etc/memcached_*.conf) | |
# check for alternative config schema | |
if [ -r "${FILES[0]}" ]; then | |
CONFIGS=() | |
for FILE in "${FILES[@]}"; | |
do | |
# remove prefix | |
NAME=${FILE#/etc/} | |
# remove suffix | |
NAME=${NAME%.conf} | |
# check optional second param | |
if [ $# -ne 2 ]; | |
then | |
# add to config array | |
CONFIGS+=($NAME) | |
elif [ "memcached_$2" == "$NAME" ]; | |
then | |
# use only one memcached | |
CONFIGS=($NAME) | |
break; | |
fi; | |
done; | |
if [ ${#CONFIGS[@]} == 0 ]; | |
then | |
echo "Config not exist for: $2" >&2 | |
exit 1 | |
fi; | |
else | |
CONFIGS=(memcached) | |
fi; | |
CONFIG_NUM=${#CONFIGS[@]} | |
for ((i=0; i < $CONFIG_NUM; i++)); do | |
NAME=${CONFIGS[${i}]} | |
PIDFILE="/var/run/${NAME}.pid" | |
RETVAL=0 | |
start () { | |
echo -n "Starting $DESC: " | |
$DAEMONBOOTSTRAP /etc/${NAME}.conf $PIDFILE | |
RETVAL=$? | |
echo | |
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached | |
} | |
stop () { | |
echo -n "Stopping $DESC: " | |
killproc -p $PIDFILE /usr/bin/memcached | |
RETVAL=$? | |
echo | |
if [ $RETVAL -eq 0 ] ; then | |
rm -f /var/lock/subsys/memcached | |
rm -f $PIDFILE | |
fi | |
} | |
restart () { | |
stop | |
start | |
} | |
# See how we were called. | |
case "$1" in | |
start) | |
start | |
;; | |
stop) | |
stop | |
;; | |
restart|reload) | |
restart | |
;; | |
condrestart) | |
[ -f /var/lock/subsys/memcached ] && restart || : | |
;; | |
*) | |
echo $"Usage: $0 {start|stop|restart|reload|condrestart}" | |
exit 1 | |
esac | |
done; | |
exit $? |
That is what this is supposed to avoid, to make it easier to add new instances without copy/paste fail.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If you need to manage pools separately, it's better to make a copy of original init script and modify it to point to a new configuration/pid.
That way you can chkconfig/bounce them as a separate entity.