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"
知识点:
-
#!/bin/bash是指此脚本使用/bin/bash来解释执行,#!是特殊的表示符,其后面根的是解释此脚本的shell的路径。
- grep -v 是反向查找的意思,比如 grep -v restartApp 就是查找不含有 restartApp 字段的行
- shell 传递变量 如下:
截图文字来源:https://www.cnblogs.com/bclshuai/p/7409773.html -
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 从昨天下午一直到今天,一直协助我定位问题。