centos7虚拟机sheel一键关闭服务脚本

cd ~/installsheel

vim stop.cnf

hbase->STOP->Dhbase,HMaster@stop-hbase.sh
zookeeper->STOP->zoo.cfg@zkServer.sh#stop
hive->KILL->HiveMetaStore,HiveServer2
hadoop->STOP->NameNode,SecondaryNameNode,DataNode@stop-dfs.sh;ResourceManager,NodeManager@stop-yarn.sh
zeppelin->STOP->ZeppelinServer@zeppelin-daemon.sh#stop

vim stopservice.sh

#!/bin/bash
source /etc/profile

CNF_FILE="stop.cnf"

CNF_LINES=(`cat $CNF_FILE`)		#拿到配置文件
COUNT=0					
for item in ${CNF_LINES[@]}		#遍历配置文件的内容 @?
do
	((COUNT++))			
	item=(${item/->/ })		#替换-> 成 空格
	echo $COUNT"."${item[0]}	
done

read -p '请输入选择: ' choice		#控制台输入

#验证用户输入(必须为小于等于配置文件行数的整数)
if [[ $choice =~ ^[0-9]+$ ]]        #  ~ 正则输出要加空格^开始 $结束
then		#是数字
      if [ $choice -gt $COUNT -o $choice -lt 1 ] #-o 或者
	then
		echo "选择必须是1到 $COUNT 的数字"
		exit 0
	fi
else		#不是数字
      echo '选择必须是数字,并在提示的范围内'
	exit 0
fi


#自定义函数调用自带的脚本关闭服务
function stopSers(){
	LINE=$1				#接参
	LINE=(${LINE//@/ })		#参数@换 空格 变数组
	SERS=${LINE[0]}			#取第一部分 即原参数@前面的内容
	SERS=${SERS//,/ }			#将第一部分 , 替换 空格
	COUNT=0
	for item in $SERS
	do
		RST=`jps -ml|grep -w $item`	#如果有相应的服务
		if [[ $RST ]]
		then
			COUNT=1			#COUNT赋值1
			break
		fi
	done
	if [ $COUNT -eq 1 ]			#如果COUNT是1
	then	
		RST=`${LINE[1]//#/ }`			#调出相应的关闭命令
		echo "STOPPED"
	else
		echo "NONE"
	fi
}
#自定义函数通过系统通用函数kill关闭服务
function killSers(){
	LINE=$1
	LINE=${LINE//,/ }				#,号替换成 空格
	COUNT=0	
	for item in $LINE				#遍历服务2个runjar服务
	do
		PID=`jps -ml|grep -w $item|awk {'print $1'}`  #管道查找服务当前行拿第一个元素	
		if [[ $PID ]]			#如果存在COUNT++
		then
			((COUNT++))			
			kill -9 $PID		#停止进程
		fi
	done
	if [ $COUNT -gt 0 ]  #>0
      then
            echo "STOPPED"
      else
            echo "NONE"
      fi
	
}

#自定义函数根据参数类型和操作字符串关闭服务
function stopByLine(){
	SIGN=$1    					#hive hadoop
	TYPE=$2					#KILL	      STOP
	LINE=$3					#服务		服务@关闭命令
	case $TYPE in				
	"STOP")					#如果TYPE是 STOP
		LINE=${LINE//;/ }			#分成两段
		for item in $LINE			#遍历每一段
		do 
			RST=`stopSers $item`	#调用函数
			item=(${item//@/ })	#
			item=${item[0]}
			case $RST in		#函数返回值有两种情况一种是只要有服务关闭了返回STOPPED
			"STOPPED")
				echo '服务_[_'$item'_]_停止'
			;;
			"NONE")			#另一种没有服务关闭返回NONE
				echo '没有此服务_[_'$item'_]_存在'			
			;;
			esac
		done
	;;
	"KILL")					#如果TYPE是KILL
		RST=`killSers $LINE`
		case $RST in			#这种用法相当于java中的switch case
            "STOPPED")
                   echo '服务_[_'$LINE'_]_停止'
            ;;
            "NONE")
                   echo '没有此服务_[_'$LINE'_]_存在'             
            ;;
            esac	
	;;
	esac
}


#根据用户的选择项后关闭服务
COUNT=0
while (( $COUNT<$choice ))			#从头开始拿到选择前一个数 选2 拿0,1       选1 拿0
do
	LINE=${CNF_LINES[$COUNT]}		
	LINE=(${LINE//->/ })  			#两个// 是替换所有的意思 LINE是
	SIGN=${LINE[0]}				#SIGN 是: hive hadoop
	TYPE=${LINE[1]}				#TYPE 是: KILL STOP
	LINE=${LINE[2]}				#LINE 是: 服务@关闭命令
	RST=`stopByLine $SIGN $TYPE $LINE`	#函数循环带入参数
	for item in $RST				
	do				
		echo ${item//_/ }			#把运行输出结果替换_变成 空格
	done
	((COUNT++))
done

chmod u+x stopservice.sh

./stopservice.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值