本脚本主要有三个功能:
1.启动metasore和hiveserver2
2.关闭metastore和hiveserver2
3.查看metatore和hiveserver2进程情况
#!/bin/bash
# 使用case语句进行不同功能的判断
case $1 in
"start"){
# metastoe和hiveserver2都是前台启动的,这里改成后台启动,并且将日志输出到/dev/null
nohup /opt/module/hive/bin/hive --service metastore > /dev/null 2>&1 &
# 这里sleep 10S 因为如果hive配置里面配置了metasote.url的话
# hiveserver2不会启动内部的连接元数据的metatsote,先启动的话,会报错
sleep 10s
nohup /opt/module/hive/bin/hive --service hiveserver2 > /dev/null 2>&1 &
};;
"stop"){
# hive,没有自己的关闭命令,一般都是使用kill
# metastore和hivesever2在jps里面都是RunJar,获取他们的PID,然后kill -9
jps | grep RunJar | awk '{print \$1}' | xargs kill -9
};;
"status"){
# status功能主要是因为metastore和hiveServer2在jps里面都是只会显示RunJar,不好区分,所以添加这个功能
#首先查询是否存在两个进程
meta=`jps -m | grep metastore`
server=`jps -m | grep HiveServer2`
# 判断是否存在
if [ -n "$meta" ]
then
# 如果存在进程的话,使用下面的这句命令输出 PID metastore格式,方便观察
jps -m | grep metastore | awk '{print $1}' | xargs echo metastore | awk '{print $2,$1}'
else
# 如果没有启动的话,输出metastore stopped
echo "metastore stopped"
fi
if [ -n "$server" ]
then
jps -m | grep HiveServer2 | awk '{print $1}' | xargs echo hiveserver2 | awk '{print $2,$1}'
else
echo "hiveserver2 stopped"
fi
};;
"help"){
echo "args:hive.sh start|stop|status|"
};;
# 注意case语句一定要这个esac的结尾,我就经常忘记加,esac其实就是case的倒序
esac
本脚本知识点总结
1. case的语句格式
case $1 in
"start"){
echo "start"
};;
"stop"){
echo "stop"
};;
esac
2.nohup后台运行进程 并丢弃日志
nohup commond > /dev/null 2>&1 &
3.关闭没有关闭命令的进程
这里分为两种情况,一种是jsp,另外一种是ps -ef
首先是ps -ef命令,jps只能看到java进程,ps -ef可以看到所有进程,包括grep进程,这个是我们不想要的
假如现在我们找一个abc的进程,注意这里的abc必须是唯一的,一般打印出来的有两个进程,一个是abc进程一个是grep进程
ps -ef | grep abc
这个时候我们需要排除grep,这的-v参数就是排除的意思,剩下的就只有abc进程了
ps -ef | grep abc | grep -v grep
然后我们使用awk,获取进程的PID,awk默认的分隔符是逗号,并且PID是在第一列,
这里有一个注意点,当脚本远程执行的时候,
ps -ef | grep abc | grep -v grep | awk '{print $1}'
最后就是xargs,这个是把上一个输出,作为后面命令的参数的
kill -9 将xargs传过来的PID作为参数杀掉
ps -ef | grep file-flume-kafka | grep -v grep |awk '{print \$2}' | xargs kill -9
jps的话就不用使用grep -v grep了
jps | grep RunJar | awk '{print \$1}' | xargs kill -9
4.将命令执行结果赋值给一个变量,反双引号里面的命令是可以执行的
注意赋值给变量等号两边不可以有空格
mate=`jps -m | grep metastore`
5.判断变量是否为空那个
if [ -n $mate ]
6.使用jps,打印的hive相关进程现实Runjar的,这里将他变成对应hive进程名
awk将PID获取,然后通过xargs传值到后面的echo里面,这里打印是metastore PID
我希望将PID放到前面,使用awk,交互答应的位置,注意awk默认的间隔是空格awk '{print $2,$1}'
jps -m | grep metastore | awk '{print $1}' | xargs echo metastore | awk '{print $2,$1}'
网友评论