#!/bin/sh,初始化配置文件
source ~/.bash_profile
# make sure process can running behind,因为有时通过shell启动的脚本容易被杀死,需要进行设定
BUILD_ID=dontKillMe
# 获取zk这个服务的进程号
# grep -v grep 是去除包含grep文本的进程行
# awk 用空格截断,其中 print$2 是获取进程号
PID=`ps -ef | grep $ZK_HOME |grep -v grep| awk '{print $2}'`
echo 'zk进程号'$PID
# 执行关闭服务进程
cd $ZK_HOME/bin && ./zkServer.sh stop
sleep 5
echo 'waiting zookeeper stop'
# 返回zk这个服务有几个进程, `grep -v grep` 是去除包含grep文本的进程行
PID_NUM=`ps -ef | grep $ZK_HOME | grep -v grep | wc -l`
LOOP=0
# 如果进程数>=1,说明zk服务没有被关闭,只有当循环数小于5次,会默认循环每次等5秒
while [ $PID_NUM -ge 1 ]&&[ $LOOP -lt 5 ]; do
echo "----- waiting zookeeper shutdown, sleep 5s"
# 循环一次sleep 5 秒
sleep 5;
# 循环一次LOOP增加一次
LOOP=`expr $LOOP + 1`;
# 每次更新当前的zk服务进程数
PID_NUM=`ps -ef|grep $ZK_HOME|grep -v grep|wc -l`
echo "zk process number: "$PID_NUM
done
# 当循环次数超过5次,等待时间超过5*5+5 秒,默认采用脚本进行服务关闭不生效
if [ $LOOP -ge 5 ]; then
echo "----- Force kill zk"
kill -9 $PID;
echo "###################zk"$PID
fi
echo "zk stop finish"
# start zookeeper
cd $ZK_HOME/bin && ./zkServer.sh start
sleep 5
# 获取zk这个服务有没有进程起来,起来的进程数量
PID_NUM2=`ps -ef | grep $ZK_HOME | grep -v grep | wc -l`
# zk这个服务起来的进程数量>=1,说明服务已经起来
if [ PID_NUM2 -ge 1]; then
echo " -----zk restart ok"
fi
网友评论