钻牛角尖还是走进死胡同--shell脚本根据名称获得 dubbo 服务的 pid
到了下午,突然觉得坐立不安,可能是因为中午没有休息好。老大不小了还在做页面整合的事情,这是参加工作时就干的工作了。然后突然想去挑战高级一点的缺陷排查,结果一不小心就钻了一个牛角尖。启动 dubbo 服务的shell 脚本总是让我觉得不爽,于是一研究,就不想干别的了,非要把它整顺不可。虽然买了鸟哥Linux私房菜的书,但没有认真看,很多东西都不记得了,只好度娘了一下午,但是度娘出来的结果质量不高,后来换了谷歌一下就搜索到高质量的文章。于是整明白了 Bash Shell 和 shell 脚本还是两码事,有些时候有点差异。
不过还是有点收获,整明白了 shell 脚本的一些坑。
假定我们要找的tomcat实例在tomcat-tuiguang/的目录下,看下shell脚本:
ps -ef | grep tomcat-tuiguang/ | grep -v grep | awk '{print $2}'
这个脚本首先用ps -ef | grep tomcat-tuiguang/ 获得了进程信息中包含 tomcat-tuiguang/ 的进程信息,这样出来的结果中会包含grep本身,所以我们需要用 | grep -v grep 来排除grep本身,然后通过 awk '{print $2}'来打印出要找的进程。
上述例子中只是将进程id号打印出来,当然也可以修改为将tomcat进程kill掉,如下脚本:
ps -ef | grep tomcat-tuiguang/ | grep -v grep | awk '{print $2}' | sed -e "s/^/kill -9 /g" | sh -
具体看如下的文章吧:
1. 原文地址:Bash Shell 获取进程 PID, 感谢原作者分享。
2.原文地址:shell脚本根据名称获得tomcat的pid
代码一:被调用的脚本(dubb_ctl_jar.sh)
#!/bin/sh
show_usage() {
echo "Usage: xxx.sh xxx.jar ctrl"
echo "**********************************************"
echo "jar filename - like this: base.jar"
echo "ctrl - like this:start|stop|restart"
echo "**********************************************"
}
if [ $# -ne ]; then
show_usage
exit
#else
# echo "hah : $1"
fi
# 符合条件,进行dubbo服务操作
## java env
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1..0_79.jdk/Contents/Home
export JRE_HOME=$JAVA_HOME/jre
#SERVICE_NAME 根据传递的文件名截取 (b2b-service-base-0.0.-SNAPSHOT.jar)
## you just need to change this param name
JAR_NAME=$
APP_NAME=${JAR_NAME##*/}
APP_NAME=${APP_NAME%%.jar*}
SERVICE_DIR=/code/apps/dubbo_servers
SERVICE_NAME=$APP_NAME
#JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$2" in
start)
nohup $JRE_HOME/bin/java -Xms128m -Xmx512m -jar $JAR_NAME >/dev/null >& &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
stop)
#根据服务名称获取进程,排除 shell 脚本自身的 pid
P_ID=$(ps -ef | grep $SERVICE_NAME | grep '/bin/java' | grep -v grep | awk '{print $2}')
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
kill - $P_ID
fi
;;
restart)
$ stop
sleep
$ start
echo "=== restart $SERVICE_NAME"
;;
*)
## restart
$ stop
sleep
$ start
;;
esac
exit
代码二:开始的脚本(dubbo_ctl_start.sh),根据条件过滤文件名
#!/bin/sh
dubbo_folder="/code/apps/dubbo_servers"
echo start dubbo_servers
script_src=$(cd "$(dirname "$")"; pwd)
#cd $dubbo_folder
cd $dubbo_folder
filelist=$(ls)
for file in $filelist
do
if test -f $file
then if [[ $file == *$".jar" ]] && [[ $file != *$"lucene"* ]] && [[ $file != *$"mail"* ]] && [[ $file != *$"sms"* ]] && [[ $file != *$"sns"* ]]
then
#echo 调用另外一个脚本传递参数,启动 dubbo 服务
sh $script_src/dubbo_ctl_jar.sh $file start
fi
#else
# echo $file 是目录
fi
done cd $script_src
代码三:停止的脚本(dubbo_ctl_stop.sh),其实和开始脚本一样的
#!/bin/sh
dubbo_folder="/code/apps/dubbo_servers"
echo stoping dubbo_servers
#current path
script_src=$(cd "$(dirname "$")"; pwd)
#cd $dubbo_folder
cd $dubbo_folder
rm -rf ./logs/*
filelist=$(ls)
for file in $filelist
do
if test -f $file
then if [[ $file == *$".jar" ]]
then
#echo 调用另外一个脚本传递参数,停止 dubbo 服务
sh $script_src/dubbo_ctl_jar.sh $file stop
fi
#else
# echo $file 是目录
fi
done cd $script_src
钻牛角尖还是走进死胡同--shell脚本根据名称获得 dubbo 服务的 pid的更多相关文章
- Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务
文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...
- linux shell脚本守护进程监控svn服务
最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...
- linux环境下编写shell脚本实现启动停止tomcat服务
第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...
- [linux] shell脚本编程-ubuntu创建vsftpd服务
1. useradd -s /bin/bash -m 用户名 , 创建用户,自动创建家目录 , 设置登录shell 2. echo 用户名:密码 | chpasswd ,非交互式设置密码 3. ...
- 【shell脚本】自动监控tomcat服务===autoCheck.sh
自动监控tomcat服务,当tommcat服务挂掉时自动重启 一.脚本内容 [root@localhost ]# cat /root/autoCheck.sh #!/bin/bash startTom ...
- 案例五:shell脚本实现定时监控http服务的运行状态
注意:监控方法可以为端口.进程.URL模拟访问方式,或者三种方法综合. 说明:由于截止到目前仅讲了if语句,因此,就请大家用if语句来实现. [root@oldboy-B scripts]# cat ...
- 使用shell脚本批处理控制大数据环境服务启动停止
三台集群机器: master 192.168.168.200 slave1 192.168.168.201 slave2 192.168.168.202 1.start-maste ...
- shell 脚本编写基础
在进行Linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入 ./smartzip就能运行脚本了.. 每行 ...
- Linux学习Day6:编写Shell脚本
Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...
随机推荐
- webGL和three.js的关系
如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用.你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上创建各种交互组件.现在这个功能集合里又有了一个新成员 ...
- hdu 3022 Sum of Digits
http://acm.hdu.edu.cn/showproblem.php?pid=3022 题意: 最多不超过10000组数据,每组数据给定两个数n,m,求一个最小的数,使得该数每一位之和等于n,每 ...
- Spring RedisTemplate操作-HyperLogLog操作(7)
@Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...
- 【整理】HTML5游戏开发学习笔记(2)- 弹跳球
1.预备知识(1)在画布上绘制外部图片资源(2)梯度(gradient):HTML5中的对象类型,包括线性梯度和径向梯度.如createLinearGradient,绘制梯度需要颜色组http://w ...
- Guava HashMultiset(MultiSet)
multiset:多重集合,和set唯一的不同是 set 集合中一个值只能出现一次,而multiset多重集合中一个值可以出现多次.一个典型的应用就是统计单词出现次数 举例: public class ...
- MongoDB 之 Limit 选取 Skip 跳过 Sort 排序 MongoDB - 7
我们已经学过MongoDB的 find() 查询功能了,在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单 首先我们看下添加几条Document进来 ...
- Dream_Spark版本定制第一课
从今天起,我们踏上了新的Spark学习旅途.我们的目标是要像Spark官方机构那样有能力去定制Spark. 一. 我们最开始将从Spark Streaming入手. 为何从Spark Streami ...
- 【ARTS】01_07_左耳听风-20181224~1230
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- GaN助力运营商和基站OEM实现5G sub-6GHz和mmWave大规模MIMO
到2021年,估计全球会有更多的人拥有移动电话(55亿),将超过用上自来水的人数(53亿).与此同时,带宽紧张的视频应用将进一步增加对移动网络的需求,其会占移动流量的78%.使用大规模多输入多输出(M ...
- .NET下获取应用程序目录的一些方法
今天在Console Application下搞了一个小功能,期间需要获取当前应用程序的根目录,试了很多方式,都不能直接获取到,没有像Server.MapPath()这类的方法来方便地使用. 下面列举 ...