zookeeper的一个特例脚本server.sh

server.sh

#!/bin/sh
# Zookeeper
# author [email protected]
# $Id: server.sh 2016-06-30 12:00:00

SERVICE_FLAG=zkClient
SYSTEM_TIME=`date '+%Y-%m-%d %T'`
cd $(dirname $0) && {
    SHELL_PATH=`pwd`
    cd - &> /dev/null
}

ZOOKEEPER_HOME=${SHELL_PATH}
LOG_PATH=$ZOOKEEPER_HOME/logs
SHELL_PIDFILE=$ZOOKEEPER_HOME/logs/shell.pid
LOG=$ZOOKEEPER_HOME/logs/shell.log
PID_FILE=$ZOOKEEPER_HOME/logs/Zookeeper_pid.log
if [ ! -d "$LOG_PATH" ]; then
    mkdir "$LOG_PATH"
fi
if [ ! -f "$PID_FILE" ]; then
    touch "$PID_FILE"
fi
function check_shell {
    SHELL_PID=`cat $SHELL_PIDFILE 2> /dev/null`
    if [ $? -eq 1 ]; then
        echo 'no pid file'
    else
        count=`ps aux | grep -w $SHELL_PID | grep 'server.sh' | grep -v grep | wc -l`
        if [ $count -gt 0 ]; then
            echo "shell is running  pid : $SHELL_PID" >> $LOG
            exit
        fi
    fi
}

date >> $LOG
check_shell

flock -n $SHELL_PIDFILE -c "echo $$ > $SHELL_PIDFILE; sleep 0.5"
//执行失败 则说明进程已存在
if [ $? -eq 1 ]; then 
    SHELL_PID=`cat $SHELL_PIDFILE 2> /dev/null`
    echo "$SHELL_PID is running" >> $LOG
    exit
fi
echo "shell pid is $$" >> $LOG

//获取文件锁成功,再次校验shell进程id是否是当前进程id
SHELL_PID=`cat $SHELL_PIDFILE 2 > /dev/null`
if [ ! $SHELL_PID -eq $$ ]; then
     echo "pid file is updated by $SHELL_PID; current shell pid is $$" >> $LOG
     exit
fi

function start {
    cd $ZOOKEEPER_HOME && {
        pid=`cat $PID_FILE`
        count=`ps aux | grep ${SERVICE_FLAG} | grep -v grep | wc -l`
        if [ $count -eq 1 ]; then
            echo "Zookeeper is running, pid is $pid"
        else
            ${SHELL_PATH}/${SERVICE_FLAG}
            if [ $? -eq 0 ]; then
                z_pid=`ps aux | grep ${SERVICE_FLAG} | grep -v grep | awk '{print $2}'`
                echo $z_pid>${PID_FILE}
                echo "zookeeper start success, pid is `cat $PID_FILE`"
            else
                echo "zookeeper start fail"
            fi
        fi
    }
}

function stop {
    cd $ZOOKEEPER_HOME && {
        pid=`cat $PID_FILE`
        count=`ps aux | grep -w ${SERVICE_FLAG} | grep -v grep | wc -l`
        echo "stop zookeeper , current thread number is $count" >> $LOG
        if [ $count -ge 1 ]; then
            `ps -ef | grep ${SERVICE_FLAG} | grep -v "grep" | awk '{print $2}' | xargs sudo kill -9`
            echo "zookeeper is stoping" >> $LOG
        else
            echo "stop fail, zookeeper is not running" >> $LOG
        fi
    }
}

case $1 in

    start)
    start
    exit;;

    stop)
    stop 
    exit;;

    restart)
    stop
    start
    exit;;
 
    reload)
    stop
    start
    exit;;

    *)
    echo "invalid arg: $1" >> $LOG;;
esac

猜你喜欢

转载自blog.csdn.net/weixin_33904756/article/details/86821777
今日推荐