前几天刚学了一点shell脚本,立马测试一下,写一个定时重启的脚本。
脚本编写
想好处理逻辑后剩下的就是具体的实现:查询当前tomcat的pid ,kill
进程更直接(不用 shutdown.sh
是因为有时候关不掉),然后重启tomcat(使用startup.sh
)。过程就这么简单,实现的过程却很坎坷。
vi tomcat_restart.sh
chmod +x tomcat_restart.sh
-
java环境,需要在脚本里声明,不然
startup.sh
启动不了(报环境错误,消耗了4个小时解决)。// 查询当前的tomcat jdk路径
#!/bin/sh # the jdk path echo "*****************start**************" export JAVA_HOME=/home/jdk/jdk1.8.0_161
-
获取tomcat 进程的ID,需要指定需要重启的tomcat路径(系统中会运行多个tomcat)——(耗时四个小时)
// 有两种指定tomcat 的路径-
shell 脚本存放位置任意时,变量声明指定
# the tomcat path & script path anywhere tomcat_path='/home/*/*/tomcat'
-
需将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}'`
-
-
开始执行删除、重启操作。
// 删除
# 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
-
加入定时器、系统定时执行该脚本
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
文中列出的几个点都是踩过的坑,也查询了好多资料。
感谢所有资料的网友。