shell脚本实现重启tomcat项目

背景: 

  日常工作中有时会需要手动重启tomcat项目,每次都是cd  到项目路径下--->cd   bin--->./startup.sh, 一直都是重复性的 cd  cd cd   很烦人。有次同事说,怎么不把它搞成自动化脚本呢?每次这样搞,多浪费时间。 so  决定写个脚本解放双手。

之前考虑过有python来实现,后来放弃了。目前服务器中的python版本是2.6.6,目前大多数用的版本是python 3.x 。 

需求:

  想用脚本重启tomcat项目,通过传参的方式(参数:项目的名称) 。

  脚本名称:restartApp.sh

  脚本运行方式:sh restartApp.sh  tomcat-8107

代码:

#!/bin/bash
set -x
#ps_result=`ps -ef | grep tomcat| grep $1`
#echo "${ps_result}"

echo -e "\n\n\n"
pids=`ps -ef| grep tomcat |grep $1 |grep -v 'grep'|grep -v 'restartApp.sh'|awk '{print $2}'`
count=0
pid_num=0
for pid in ${pids}
do 
	pid_num=${pid}
	echo "pid_num:${pid_num}"
	#count=`expr ${count}+1`
	count=$(($count+1))
	echo  "count: ${count}"
done

if [[ $count -gt 1 ]]
then
	echo  "一个项目有两个进程 异常"
else
	kill -9 ${pids}
	echo "Kill ${pids}  Success!"
	#重启
	echo  "重启中。。。。。。。"
	sh /home/lifesea/$1/bin/startup.sh
fi
echo -e "\n\n\n"

知识点:

  1. #!/bin/bash是指此脚本使用/bin/bash来解释执行,#!是特殊的表示符,其后面根的是解释此脚本的shell的路径。

  2. grep -v 是反向查找的意思,比如 grep -v restartApp 就是查找不含有 restartApp 字段的行
  3. shell 传递变量 如下:

    截图文字来源:https://www.cnblogs.com/bclshuai/p/7409773.html
  4. awk '{print $2}'   打印第二个字段

遇到的问题:

1.反撇号的用处,第一次用到

2.

开始的时候: 没有加 grep -v 'restartApp.sh'   导致查询出来的进程有很3个(除了grep),如下图  

更改后:ps -ef| grep tomcat |grep $1 |grep -v 'grep'|grep -v 'restartApp.sh'|awk '{print $2}'

 

执行以下语句得出如下图的结果

  $1更改为:grep tomcat-8107

#ps_result=`ps -ef | grep tomcat| grep $1`
#echo "${ps_result}"

 

 

3.在服务器上调试脚本 vim restartApp.sh 脚本   因为不熟悉的缘故,导致效率低。

vim 常用快捷键: 

:set number  显示行号

:set  -x    详细的日志输出

h      向前

j       向下

k      向上

l      向右

4.感谢znn  从昨天下午一直到今天,一直协助我定位问题。

 

posted @ 2019-07-18 17:15  eosclover  Views(1202)  Comments(0Edit  收藏  举报