欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[ SHELL ] 利用shell脚本启动服务!

程序员文章站 2022-06-30 10:51:45
...

  前言:当你的机器装完Hadoop、yarn、Hive、zookeeper、Hbase后,可利用下方shell脚本来一个“一键启动”。当然,如果后续还有服务需要启动时,可按照脚本上端的字符串格式进行编写。

一、编写启动服务的脚本文件

  1.先输入命令:vi start.sh,将下方代码复制进去,退出并保存。

#!/bin/bash
HB="hbase HMaster HRegionServer start-hbase.sh"
ZK="zookeeper QuorumPeerMain zkServer.sh_start"
HV="hive RunJar RunJar nohup_hive_--service_?>/dev/null_2>&1_&"
YN="yarn NodeManager ResourceManager start-yarn.sh"
HD="dfs DataNode SecondaryNameNode NameNode start-dfs.sh"

function checkStart(){
    COUNT=0
    ARR=[email protected]
    ARR=($ARR)
	SIZE=$(($#-2))
    for i in `seq 1 $SIZE`
    do
        V=`jps|grep ${ARR[$i]}`
        if [ "$V" ]
        then
			if [ $1 == "hive" ]
			then
				V=($V)
				COUNT=$((${#V[*]}/2))
			break
			else
            ((COUNT++))
          	fi
         fi
    done

    if [ $COUNT -eq $SIZE ]
    then
        echo "start $1 successfully"
    else
        echo "fail to start $1"
		echo "we will rollback all those have been started ..."
		exit 1
    fi
}

function start(){
    ARR=[email protected]
    ARR=($ARR)
    echo "start $1 ..."
    OUTPUT=${ARR[$#-1]}
	OUTPUT="${OUTPUT//_/ }"
    if [[ $OUTPUT =~ ^nohup ]]
    then
		eval ${OUTPUT/\?/metastore}
		sleep 15s
		eval ${OUTPUT/\?/hiveserver2}
		sleep 15s
    else
        OUTPUT=`$OUTPUT`
     fi
	checkStart [email protected]
}

start $HD
start $YN
start $HV
start $ZK
start $HB

  2.此命令用来启动,在命令行模式中执行代码如下。

./start.sh		#执行启动命令

二、编写停止服务的脚本文件

  1.先输入命令:vi stop.sh,将下方代码复制进去,退出并保存。

#!/bin/bash
HB="hbase HMaster HRegionServer stop-hbase.sh"
ZK="zookeeper QuorumPeerMain zkServer.sh_stop>~/zk.log_2>&1"
HV="hive RunJar RunJar kill"
YN="yarn NodeManager ResourceManager stop-yarn.sh"
HD="dfs DataNode SecondaryNameNode NameNode stop-dfs.sh"
function checkStop(){
 	STOP=0
	ARR=[email protected]
	ARR=($ARR)
    for i in `seq 1 $(($#-2))` 
    do
        V=`jps|grep ${ARR[$i]}`
        if [ "$V" ]
        then
            ((STOP++))
             break
         fi
    done

    if [ $STOP -eq 0 ]
    then
        echo "stop $1 successfully"
    else
        echo "fail to stop $1"
    fi
}


function stop(){
	ARR=[email protected]
	ARR=($ARR)
	COUNT=0
	for i in `seq 1 $(($#-2))`
	do
		V=`jps|grep ${ARR[$i]}`
		if [ "$V" ]
		then
			echo "start to stop $1 ..."
			OUTPUT=${ARR[$#-1]}
			((COUNT++))
			if [ $OUTPUT = "kill" ]
			then
				PID=`jps|grep RunJar|awk 'NR==1 {print $1}'`
				OUTPUT=`kill -9 $PID`
			else
				OUTPUT="${OUTPUT//_/ }"
				OUTPUT=`eval $OUTPUT`
				break
			fi
		fi
	done

	if [ $COUNT -eq 0 ]
	then
    	echo "no $1 to stop"
	else
		checkStop [email protected]
	fi
}
stop $HB
stop $ZK
stop $HV
stop $YN
stop $HD

  2.此命令用来启动,在命令行模式中执行代码如下。

./stop.sh		#执行关闭命令

三、编写总开关服务的脚本文件

  1.先输入命令:vi hdctl.sh,将下方代码复制进去,退出并保存。

#!/bin/bash

P=($*)
L=${#P[*]}
if [ $L -eq 0 ]
then
	./start-all.sh
else
	if [[ $1 =~ ^start$|^stop$|^restart$ ]]
	then
		if [[ $1 =~ ^stop|restart$ ]]
    	then
        	./stop-all.sh
    	fi
    	if [[ $1 =~ ^start|restart$ ]]
    	then
        	./start-all.sh
    	fi
	else
		echo "invalid argument : $1"
		exit 1
	fi
fi

  2.此命令用来启动、关闭、重启各项服务,在命令行模式中执行代码如下。

./hdctl.sh start		#启动
./hdctl.sh stop			#关闭
./hdctl.sh restart		#重启