Sophie

Sophie

distrib > Mandriva > 2010.1 > x86_64 > media > main-release-src > by-pkgid > 12e42f91b0e6ec1ff718f60f1867b9bc > files > 3

memcached-1.4.5-3mdv2010.1.src.rpm

#!/bin/bash
#
# memcached	This shell script takes care of starting and stopping memcached.
#
# chkconfig: 345 55 45
# description: High-performance memory object caching system.
# probe: false
# processname: memcached
# pidfile: /var/run/memcached/memcached.pid
# config: /etc/sysconfig/memcached
### BEGIN INIT INFO
# Provides: memcached
# Required-Start: $syslog $network
# Required-Stop: $syslog $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: High-performance memory object caching system
# Description: High-performance memory object caching system.
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0

TCP_PORT="11211"
UDP_PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
IPADDR="127.0.0.1"
THREADS="4"
UNIX_SOCKET=
OPTIONS=
if [ -f /etc/sysconfig/memcached ]; then
	# in case we have an old sysconfig file which uses unix sockets,
	# be sure to fix path to use for the socket file
	if ( grep -q /var/lib/memcached /etc/sysconfig/memcached ); then
		sed -e 's#/var/lib/memcached#/var/run/memcached#g' -i /etc/sysconfig/memcached
	fi
	. /etc/sysconfig/memcached
fi

prog=${MEMCACHED_DAEMON:-"memcached"}
LOCK_FILE=/var/lock/subsys/${prog}
PID_DIR=/var/run/memcached
PID_FILE=${PID_DIR}/${prog}
INSTANCES=${INSTANCES:-"1"}

start() {
	# Ensure that /var/run/memcached has proper permissions
	if [ "`stat -c %U ${PID_DIR}`" != "${USER}" ]; then
		chown $USER ${PID_DIR}
	fi
	gprintf "Starting %s: " $prog
	I=0;
	while [ $I -lt $INSTANCES ]; do
		var="TCP_PORT${I}";    val=${!var}; THIS_TCP_PORT="-p ${val:-$TCP_PORT}"
		var="UDP_PORT${I}";    val=${!var}; THIS_UDP_PORT="-U ${val:-$UDP_PORT}"
		var="USER${I}";        val=${!var}; THIS_USER="-u ${val:-$USER}"
		var="MAXCONN${I}";     val=${!var}; THIS_MAXCONN="-c ${val:-$MAXCONN}"
		var="CACHESIZE${I}";   val=${!var}; THIS_CACHESIZE="-m ${val:-$CACHESIZE}"
		var="THREADS${I}";     val=${!var}; THIS_THREADS="-t ${val:-$THREADS}"
		var="OPTIONS${I}";     val=${!var}; THIS_OPTIONS="${val:-$OPTIONS}"

		# IPADDR and UNIX_SOCKET need to be handled specially 
		var="IPADDR${I}";      val=${!var}; THIS_IPADDR="${val:-$IPADDR}"
		if [ "INADDR_ANY" = "${THIS_IPADDR}" -o -z "${THIS_IPADDR}" ]; then
			THIS_IPADDR=""
		else
			THIS_IPADDR="-l ${THIS_IPADDR}"
		fi

		var="UNIX_SOCKET${I}"; val=${!var}; THIS_UNIX_SOCKET="${val:-$UNIX_SOCKET}"
		if [ -n "${UNIX_SOCKET}" ]; then
			THIS_IPADDR="-s ${THIS_UNIX_SOCKET}"
		fi

		THIS_PID_FILE="${PID_FILE}$I.pid"
		THIS_LOCK_FILE="${LOCK_FILE}$I"

		ARGS="${THIS_IPADDR} ${THIS_TCP_PORT} ${THIS_UDP_PORT} ${THIS_USER} ${THIS_CACHESIZE} ${THIS_THREADS} ${THIS_MAXCONN} ${THIS_OPTIONS} -P ${THIS_PID_FILE}"
		if [ "0" = "$I" -a -n "${MEMCACHED_OPTIONS}" ]; then
			# MEMCACHED_OPTIONS is for backwards compatibility with older sysconfig/memcached,
			# in case you've modified it yourself and rpm has therefore not been automatically
			# replaced it with newer version. It is only used on the first instance
			ARGS=${MEMCACHED_OPTIONS}
		fi

		daemon --pidfile ${THIS_PID_FILE} ${prog} -d $ARGS
		RETVAL=$?
		echo
		[ $RETVAL -eq 0 ] && touch ${THIS_LOCK_FILE}

		# Increment the default ports
		if [ "0" != "${TCP_PORT}" ]; then
			TCP_PORT=$(( ${TCP_PORT} + 1 ))
		fi
		if [ "0" != "${UDP_PORT}" ]; then
			UDP_PORT=$(( ${UDP_PORT} + 1 ))
		fi
		I=$(( $I + 1 ))
	done
}

stop() {
	gprintf "Stopping %s: " $prog
	I=0;
	while [ $I -lt $INSTANCES ]; do
		THIS_PID_FILE="${PID_FILE}$I.pid"
		THIS_LOCK_FILE="${LOCK_FILE}$I"

		killproc -p ${THIS_PID_FILE} $prog
		RETVAL=$?
		echo
		[ $RETVAL -eq 0 ] && rm -f ${THIS_LOCK_FILE}

		I=$(( $I + 1 ))
	done
}

rh_status()
{
	ONE_RUNNING=no
	I=0;
	while [ $I -lt $INSTANCES ]; do
		THIS_PID_FILE="${PID_FILE}$I.pid"
		THIS_LOCK_FILE="${LOCK_FILE}$I"

		status -p ${THIS_PID_FILE} -l ${THIS_LOCK_FILE} "$prog$I"
		RETVAL=$?
		if [ $RETVAL -eq 0 ]; then
			ONE_RUNNING=yes
		fi

		I=$(( $I + 1 ))
	done

	if [ "${ONE_RUNNING}" = "yes" ]; then
		return 0
	fi

	return 1
}

rh_status_q()
{
	return $(rh_status >/dev/null 2>&1)
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
	rh_status
	;;
  restart|reload)
	stop
	start
	;;
  condrestart|try-restart)
	rh_status_q || exit 0
	stop
	start
	;;
  *)
	gprintf "Usage: %s {start|stop|status|restart|condrestart|reload}\n" $prog
	RETVAL=2
esac

exit $RETVAL