钻牛角尖还是走进死胡同--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会一次性执行脚本中诸多 ...
随机推荐
- Linux命令(五)免密码远程登录和配置别名
1. ssh-keygen 2. ssh-copy-id -p port user@remote .ssh中建立并编辑config文件 原来需要 ssh -p ubuntu@xxx.xxx.xxx 现 ...
- postman提取接口的返回值及动态设置变量(一)
一.提取接口返回值 1.当返回值是返回JSON时 let json = JSON.parse(responseBody); // responseBody是包含整个返回内容的字符串 let foo ...
- nginx php上传大文件的设置(php-fpm)
对于lnmp架构的大文件上传的问题,有几个地方需要修改,另外还有几个参数如果更改过需要注意,下面是详细的需要注意的地方: nginx的修改 send_timeout 6 ...
- tf.Session()和tf.InteractiveSession()的区别
官方tutorial是这么说的: The only difference with a regular Session is that an InteractiveSession installs i ...
- IIS发布,无法显示CSS样式和图片
描述: 最近给同事安装web程序时,把IIS安装好后,发布网站时,图片和css样式不显示. 程序没问题,发布也没问题. 后来网上一查,出错的原因可能是IIS的配置问题. 果然,按照网上的方法,顺利显示 ...
- html中的body和head有什么区别??
我的html文件如下: <html> <title>这是我的测试</title> <head> my test </head> <bo ...
- Oracle SQL部分练习题
SQL练习题 注:查询列表不建议用 “*” 1.列出至少有一个雇员的所有部门: a. select * from dept where deptno in(select distinct ...
- 为什么要使用断路器Hystrix?
为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自身的原因,服务并不能保证服 ...
- java虚拟机规范(se8)——java虚拟机结构(四)
2.7 对象的表示 java虚拟机并不要求对象满足任何特定的内部结构. 在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身是一对指针:一个指向包含对象方法的表和指向表 ...
- docker 要点学习
本文主要记录学习和使用docker时遇到的一些问题和踩过的坑 1.本地docker新建redis容器,映射6379端口到本地,本机的java项目再去连,会一直连不上,原因是redis容器中映射端口时需 ...