shell脚本定时重启tomcat

前几天刚学了一点shell脚本,立马测试一下,写一个定时重启的脚本。

脚本编写

shell基础知识

想好处理逻辑后剩下的就是具体的实现:查询当前tomcat的pid ,kill进程更直接(不用 shutdown.sh 是因为有时候关不掉),然后重启tomcat(使用startup.sh)。过程就这么简单,实现的过程却很坎坷。

vi tomcat_restart.sh
chmod +x tomcat_restart.sh
  1. java环境,需要在脚本里声明,不然startup.sh启动不了(报环境错误,消耗了4个小时解决)。

    // 查询当前的tomcat jdk路径 在这里插入图片描述

     #!/bin/sh
     # the jdk path
     echo "*****************start**************"
     export JAVA_HOME=/home/jdk/jdk1.8.0_161
    
  2. 获取tomcat 进程的ID,需要指定需要重启的tomcat路径(系统中会运行多个tomcat)——(耗时四个小时)
    // 有两种指定tomcat 的路径

    1. shell 脚本存放位置任意时,变量声明指定

       # the tomcat path & script path anywhere
       tomcat_path='/home/*/*/tomcat' 
      
    2. 需将shell脚本存放于tomcat的根目录下

       # the tomcat path & script path in the root of tomcat
       tomcat_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
      

    ok ,解决掉路径问题,开始查询它的进程。

     # check and get the tomcat Pid
     tomcat_id=`ps -ef|grep ${tomcat_path} | grep -v grep | awk '{print $2}'`
    
  3. 开始执行删除、重启操作。

    // 删除

     # shutdown tomcat and restart
     if [ ${tomcat_id} = "" ]
     then
      	echo 'no tomcat pid alive'
      else
      	echo "the tomcat's pid is ${tomcat_id} and will kill it "
      	kill -9 ${tomcat_id}
      	tomcat_id=`ps -ef|grep ${tomcat_path} | grep -v grep | awk '{print $2}'`
      	
      	if [ ${tomcat_id} = "" ]
      	then 
      		echo 'killed pid success!'
      	fi
      fi
    

    // 重启

     # restart the tomcat 
     # start
     ${tomcat_path}/bin/startup.sh
     # check the tomcat pid is exist
     tomcat_id=`ps -ef|grep ${tomcat_path} | grep -v grep | awk '{print $2}'`
     if test -z ${tomcat_id}
     then
     	echo "the path of ${tomcat_path} restart faild"
     else
     	echo "the path of ${tomcat_path} restart success"
     	echo "the tomcat pid is ${tomcat_id}"
     fi
     echo "************end**************"
    

脚本编写完毕,可单个测试,执行脚本。

./tomcat_restart.sh
  1. 加入定时器、系统定时执行该脚本

     crontab -h           // 查看crontab的使用
     crontab -l          // 列出当前的定时任务
     crontab -e             // 编译、添加定时任务
    
     // 格式:
        */5 *  *  *  * cd /home/*/*/ & ./tomcat_restart.sh > /home/*/*/restart.log                      // 每个五分钟执行一次
    

    说明:
    * * * * * 表示任何时候 //分 时 日 月 周
    , 分割,多个时间点,如1点和4点 1,4
    - 分割 ,一段时间范围内,如1点到四点 1-4
    /n 间隔,没个多少时间,每5分钟,*/5

需要注意的是,定时任务中,对于脚本的存放目录也有要求,cd /home/*/* 先进入到目录下,在执行./tomcat_restart.sh

文中列出的几个点都是踩过的坑,也查询了好多资料。
感谢所有资料的网友。

你可能感兴趣的:(shell,脚本,linux)