centos7虚拟机sheel一键启动服务脚本

cd ~/installsheel

vim start.cnf

hadoop->NameNode_SecondaryNameNode_DataNode_ResourceManager_NodeManager;start-dfs.sh_start-yarn.sh
hive->HiveMetaStore_HiveServer2;nohup#hive#--service#metastore>/dev/null#2>$1#&_nohup#hive#--service#hiveserver2>/dev/null#2>$1#&
zookeeper->zoo.cfg;zkServer.sh#start
hbase->Dhbase_HMaster;start-hbase.sh
zeppelin->ZeppelinServer;zeppelin-daemon.sh#start

#vim startservice.sh

#!/bin/bash
#配置信息
#启动hive必须启动hadoop   启动Hbase必须要启动hadoop+hive
source /etc/profile
# 一键启动配置文件
CNF_FILE='start.cnf'
# 验证配置文件(必须存在且为文件)
if [ ! -e $CNF_FILE -o -d $CNF_FILE ]
then
	echo $CNF_FILE"没有这个文件."
	exit 0
fi

# 将配置文件内容读入变量并转为列表
CNF_LINES=(`cat start.cnf`)

# 按行输出配置信息,将第一项作为内容提示供用户选择
count=0
for item in ${CNF_LINES[@]}
do
	((count++))
	arr=(${item/->/ })
	echo $count "."${arr[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 killOnLeft(){  	#服务没有全部启动 干死你再重新启动
	SIGN=$1  #接参数
	SERS=$2
	SERS=(${SERS//_/ })   #2参数的替换
	PIDS=()
	count=0
	for item in ${SERS[@]}
	do
		# jps配合管道检查指定服务项是否存在
		RST=`jps -ml|grep -w $item`
		if [[ $RST ]]
		then
			RST=($RST)
			PIDS[$count]=${RST[0]}
			((count++))
		fi
	done
	if [ $count -lt ${#SERS[@]} ] #<
	then			#干掉服务
		# 若存在不完整的残留kill进程
		if [ $count -gt 0 ]   	#
		then
			for pid in ${PIDS[@]}
			do
				RST=`kill -9 $pid` 
			done
			echo "$SIGN 有服务残留并关闭"
		else
			echo "$SIGN 没有残留"
		fi
		echo 'no'
	else	#>=
		echo "$SIGN 正在运行"
		echo 'ok'
	fi
}

# 自定义函数调用函数命令集启动相应服务
function startSers(){
	SIGN=$1
	SERS=$2			#$1 是配置信息
	SERS=${SERS//_/ } 	#替换_ 成 空格
	for cmd in $SERS
	do
		RST=`eval ${cmd//#/ }` #使用``阻塞 并赋予变量 结果不输出
	done
	echo $SIGN" 已经被启动"
}


# 循环执行用户选择的配置文件中命令行
count=0
while (( $count<$choice ))
do
	LINE=${CNF_LINES[$count]}  	# 拿到控制台输入的条数
	echo 'LINE=${CNF_LINES[$count]}--------------' $LINE
	LINE=(${LINE//->/ })		# 替换-> 成 空格 再次变成数组
	echo 'LINE=(${LINE//->/ })---------------' $LINE
	SIGN=${LINE[0]}			# 拿到第1个
	echo 'SIGN=${LINE[0]}--------------' $SIGE
	LINE=${LINE[1]}			# 拿到第2个
	echo 'LINE=${LINE[1]}--------------' $LINE
	LINE=(${LINE//;/ })		# 再把;换 空格 变成数组
	echo 'LINE=(${LINE//;/ })-------------' $LINE
	SERS=${LINE[0]}			# 再把拿到第1个
	echo 'SERS=${LINE[0]}-------------' $SERS
	CMDS=${LINE[1]}			# 拿第2个
	echo 'CMDS=${LINE[1]}-------------' $CMDS
	RST=`killOnLeft $SIGN $SERS`
	echo $RST
	if [[ $RST =~ no$ ]]
	then	#这里要调用函数启动
		RST=`startSers $SIGN $CMDS`
		echo $RST		
	fi
	((count++))
done

chmod u+x startservice.sh

./startservice.sh

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值