• 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 "
    
    
    "
    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 "
    
    
    "

    知识点:

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

  • 相关阅读:
    【转载】algorithm、numeric、functional
    spring-boot项目中通过maven下载依赖 导入自己的jar包
    spring-boot项目 idea maven编译失败 解决办法
    SVM核函数功能和选择——可视化 附源代码
    乳腺癌数据集上SVM核函数功能和选择的研究报告
    Python编程实验一 决策树实现结果预测
    操作系统课程设计 设备驱动
    操作系统课程设计 内核模块
    操作系统课程设计 系统调用
    操作系统课程设计 编译Linux内核
  • 原文地址:https://www.cnblogs.com/eosclover/p/11208626.html
Copyright © 2020-2023  润新知