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 从昨天下午一直到今天,一直协助我定位问题。

截图文字来源:https://www.cnblogs.com/bclshuai/p/7409773.html
浙公网安备 33010602011771号