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