到了下午,突然觉得坐立不安,可能是因为中午没有休息好。老大不小了还在做页面整合的事情,这是参加工作时就干的工作了。然后突然想去挑战高级一点的缺陷排查,结果一不小心就钻了一个牛角尖。启动 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. 2018年9月28日CCPC秦皇岛站参赛总结

    day1: 被中间结果超出int范围给叉了,立刻意识到了自己的弱小以及校赛出题的时候是怎么叉别人的 day2: 签到签了40分钟,谨慎一些还是很好的,机子重启耽误了一些时间 一道暴力+LCS的简单题被 ...

  2. JavaScript继承详解(四)

    在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. Crockford是Java ...

  3. 【CodeForces】925 C.Big Secret 异或

    [题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...

  4. python垃圾回收二

    由于循环引用的存在,我们在删除了a跟b之后,引用计数是1,这样,现有的垃圾回收机制是永远不可能把她们删除了.他们将永远存在于内存中. 我们当然不能对这种情况置之不理,于是,我们又添加了两种新的回收机制 ...

  5. 【Linux系统编程应用】Linux音频编程基础(一)【转】

    转自:https://blog.csdn.net/dengjin20104042056/article/details/52435290 一.数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处 ...

  6. binlog2sql的安装及使用

    binlog2sql是大众点评开源的一款用于解析binlog的工具,在测试环境试用了下,还不错. DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法 ...

  7. 一步步实现windows版ijkplayer系列文章之一——Windows10平台编译ffmpeg 4.0.2,生成ffplay

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  8. shell脚本 ------ 输出带颜色的字体

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e “\033[字背景颜色:文字颜色m字符串\033[0m” 例如: echo -e “\03 ...

  9. Ubuntu+Nginx+uWSGI+Flask应用

    Ubuntu 18.04,Nginx 1.14.0,uWSGI 2.0.17.1,Flask 1.0.2,Python 3.6.5, 多日未更新博客,就是在忙着把自己的Flask应用在Ubuntu上运 ...

  10. python实现广度优先搜索和深度优先搜索

    图的概念 图表示的是多点之间的连接关系,由节点和边组成.类型分为有向图,无向图,加权图等,任何问题只要能抽象为图,那么就可以应用相应的图算法. 用字典来表示图 这里我们以有向图举例,有向图的邻居节点是 ...