여러 Memcached 서버 /etc/init.d 시작 스크립트가 작동합니까?

여러 Memcached 서버 /etc/init.d 시작 스크립트가 작동합니까?

소스를 통해 memcached 서버를 설치하고 1개의 memcached 서버 인스턴스에 설치된 표준 시작 스크립트를 얻을 수 있지만 Google을 통해 여러 스크립트를 시도하면 여러 memcached 서버 인스턴스에 대한 부팅 시 관리자 자동 시작에 작동하는 스크립트를 찾을 수 없습니다. 이 두 스크립트를 모두 시도했지만 둘 다 작동하지 않습니다. 서비스 memcached 시작은 memcached 서버 인스턴스가 시작되지 않은 상태에서 명령 프롬프트로 돌아갑니다.

  • lullabot.com/articles/installing-memcached-redhat-or-centos
  • addmoremem.blogspot.com/2010/09/running-multiple-instances-of-memcached.html

그러나 이 bash 스크립트는 작동하지만 시작할 때 memcached 인스턴스를 시작하지 않습니다.

#!/bin/sh
case "$1" in
start)
/usr/local/bin/memcached -d -m 16 -p 11211 -u nobody
/usr/local/bin/memcached -d -m 16 -p 11212 -u nobody
;;
stop) killall memcached
;;
esac

OS: Centos 5.5 64비트 Memcached = v1.4.5 Memcache = v2.2.5

여러 memcached 서버를 관리하기 위해 작동하는 /etc/init.d/ 시작 스크립트를 알려줄 수 있는 사람이 있나요? 감사해요

편집: 고마워요 매트, 이것은 작동하게 된 코드입니다

#!/bin/sh
# chkconfig: - 80 12
# description:  The memcached daemon is a network memory cache service.
# processname: memcached
BIN=/usr/local/bin/memcached
USER=nobody
CON=2048
THREADS=4

$BIN -d -m 16 -p 11211 -c $CON -t $THREADS -u $USER
$BIN -d -m 16 -p 11212 -c $CON -t $THREADS -u $USER

case "$1" in
start)
$BIN -d -m 16 -p 11211 -c $CON -t $THREADS -u $USER
$BIN -d -m 16 -p 11212 -c $CON -t $THREADS -u $USER
;;
stop) killall $BIN
;;
esac

답변1

chkconfig에 서비스를 추가하려면 일반적으로 쉘 스크립트의 shebang 아래에 몇 가지 특별한 주석이 필요합니다.

#!/bin/sh
# chkconfig: - 55 45
# description:  The memcached daemon is a network memory cache service.
# processname: memcached

/etc/init.d/memcached에 행을 추가한 후 실행할 수 있습니다.

chkconfig --add memcached

물론 프로세스가 시작될 수 있는 추가 실행 수준이 있으므로 문제가 발생하는지 확인할 수 있습니다.

chkconfig --list | grep "memcached"

memcached의 일반적인 실행 수준은 다음과 같습니다.

chkconfig --level 345 memcached on

답변2

다음은 여러 memcached 인스턴스를 시작하는 데 사용하는 스크립트입니다. 중요한 점은 연관 배열을 사용하여 특정 인스턴스 전체 또는 하나만 시작한다는 것입니다.

#! /usr/local/bash4/bin/bash
#
# chkconfig: - 55 45
# description:  The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached

# Standard LSB functions
#. /lib/lsb/init-functions

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

if [ -f /etc/sysconfig/memcached ];then 
    . /etc/sysconfig/memcached
fi

# Check that networking is up.
. /etc/sysconfig/network

if [ "$NETWORKING" = "no" ]
then
    exit 0
fi

typeset -A PIDS
typeset -A MEMORYS
typeset -A FACTORS
typeset -A INSTANCES

PORTS="11216 11217"
USER=memcached
basedir="/usr/local/memcached"
MAXCONN=1024
OPTIONS=""
INSTANCES=([11216]="session" [11217]="userdata")
PIDS=([11216]="$basedir/var/run/sohaphimdetails.pid" [11217]="$basedir/var/run/sohamuzik-top.pid")
MEMORYS=([11216]="1024" [11217]="2048")
FACTORS=([11216]="1.25" [11217]="1.125")

RETVAL=0
prog="memcached"
cmd="/usr/local/memcached/bin/memcached"
user="memcached"
ip="192.168.6.66"
peer="192.168.6.28"
max_conn=2048
max_memory=512
threads=8

function start()
{
    port="$1"
    if [ `ps -ef | grep "$cmd" | grep -c $port` -ge 1 ]; then
        action $"Starting the memcached server on port '$port'... " /bin/false
    else
        if [ ! -f $basedir/var/log/${INSTANCES[$port]}.log ]; then 
            touch $basedir/var/log/${INSTANCES[$port]}.log 
            /bin/chown memcached:memcached $basedir/var/log/${INSTANCES[$port]}.log
        fi
        $cmd -d -u $user -l $ip -c $max_conn -t $threads -m ${MEMORYS[$port]} -p $port -P $basedir/var/run/${INSTANCES[$port]}.pid -f ${FACTORS[$port]} -x $peer -X `expr $port '*' 10` -vv > $basedir/var/log/${INSTANCES[$port]}.log 2>&1
        action $"Starting the memcached server on port '$port'... " /bin/true
    fi
}

function stop()
{
    port="$1"
    if [ `ps -ef | grep "$cmd" | grep -c $port` -eq 0 ]; then
        action $"Stopping the memcached server on port '$port'... " /bin/false
    else
        kill -TERM `ps -ef | grep "$cmd" | grep $port | grep -v grep | awk '{ print $2 }'`
        action $"Stopping the memcached server on port '$port'... " /bin/true 
    fi
}

case "$1" in
    start) 
        if [ -n "$2" ]; then
            start $2
        else
            for port in $PORTS; do
                start $port
            done
        fi
        ;;
    stop)   
        if [ -n "$2" ]; then
            port="$2"
            stop $port
        else
            killproc $prog
        fi
        ;;
    restart)
        if [ -n "$2" ]; then
            stop $2
            start $2
        else
            for port in $PORTS; do
                stop $port
                start $port
            done
        fi
        ;;
    *)
        printf 'Usage: %s {start|stop|restart} <port>\n' "$prog"
        exit 1
        ;;
esac

추신 : 나는 사용했다다시 캐시됨복제용.

답변3

스크립트가 작동하고 있으므로 /etc/rc.d에서 링크되지 않은 것으로 가정하여 시작시 실행되지 않습니다. 시작 스크립트가 /etc/init.d/memcached라고 가정하면 다음을 실행해야 합니다.

chkconfig --add memcached

시작 시 실행할 스크립트 목록에 추가합니다.

관련 정보