#!/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