到了下午,突然觉得坐立不安,可能是因为中午没有休息好。老大不小了还在做页面整合的事情,这是参加工作时就干的工作了。然后突然想去挑战高级一点的缺陷排查,结果一不小心就钻了一个牛角尖。启动 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的更多相关文章

  1. Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务

    文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...

  2. linux shell脚本守护进程监控svn服务

    最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...

  3. linux环境下编写shell脚本实现启动停止tomcat服务

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...

  4. [linux] shell脚本编程-ubuntu创建vsftpd服务

    1.  useradd -s /bin/bash -m 用户名 ,  创建用户,自动创建家目录 , 设置登录shell 2.  echo 用户名:密码 | chpasswd ,非交互式设置密码 3.  ...

  5. 【shell脚本】自动监控tomcat服务===autoCheck.sh

    自动监控tomcat服务,当tommcat服务挂掉时自动重启 一.脚本内容 [root@localhost ]# cat /root/autoCheck.sh #!/bin/bash startTom ...

  6. 案例五:shell脚本实现定时监控http服务的运行状态

    注意:监控方法可以为端口.进程.URL模拟访问方式,或者三种方法综合. 说明:由于截止到目前仅讲了if语句,因此,就请大家用if语句来实现. [root@oldboy-B scripts]# cat ...

  7. 使用shell脚本批处理控制大数据环境服务启动停止

    三台集群机器: master   192.168.168.200 slave1     192.168.168.201 slave2     192.168.168.202 1.start-maste ...

  8. shell 脚本编写基础

    在进行Linux测试时编写脚本是必不可少的,Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称,运行时只要键入 ./smartzip就能运行脚本了.. 每行 ...

  9. Linux学习Day6:编写Shell脚本

    Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...

随机推荐

  1. IsNullOrWhiteSpace与IsNullOrEmpty

    public static boolean IsNullOrEmpty(String value) { return (value == null || value.length() == 0);} ...

  2. WebSlides - 轻松制作漂亮的 HTML 幻灯片(演讲稿)

    WebSlides 是一个开源的 HTML 幻灯片项目,能够帮助熟悉前端语言的开发者快速制作出效果精美的幻灯片.页面中的每个 <section> 都是一个独立的幻灯片,只需要很少的 CSS ...

  3. [转载]Juicer – 一个Javascript模板引擎的实现和优化

    http://ued.taobao.org/blog/2012/04/juicer-%E4%B8%80%E4%B8%AAjavascript%E6%A8%A1%E6%9D%BF%E5%BC%95%E6 ...

  4. CentOS 编译 GCC 7.2

    CentOS 编译 GCC 7.2 下载源码 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0. ...

  5. 电容充放电时间常数RC计算方法

    进入正题前,我们先来回顾下电容的充放电时间计算公式,假设有电源Vu通过电阻R给电容C充电,V0为电容上的初始电压值,Vu为电容充满电后的电压值,Vt为任意时刻t时电容上的电压值,那么便可以得到如下的计 ...

  6. python 搭建http服务器和ftp服务器

    默认安装版本为pytho2.7 http服务器搭建: 进入要开放访问的目录下,执行命令:python -m SimpleHTTPServer 9000 显示上述表示安装成功,且http服务的端口为:9 ...

  7. Axure RP Pro 7.0

    Axure RP Pro专为Rapid Prototype Design而生,它可以辅助产品经理快速设计完整的产品原型,并结合批注.说明以及流程图.框架图等元素将产品完整地表述给各方面设计人员,如UI ...

  8. Python_oldboy_自动化运维之路_socket编程(十)

    链接:http://www.cnblogs.com/linhaifeng/articles/6129246.html 1.osi七层 引子: 须知一个完整的计算机系统是由硬件.操作系统.应用软件三者组 ...

  9. LeetCode(20):有效的括号

    Easy! 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭 ...

  10. FileOutputSteam入门

    FileOutputSteam 字节输入流 从控制台将字节保存到本地硬盘 package com.isoftstone.io; import java.io.FileOutputStream; imp ...