Linux系统上实现定时重启Tomcat服务脚本介绍
因为使用阿里云部署服务器应用时,tomcat服务经常由于内存不足出现outofmemoryerror异常的情况。经常过几天就需要重启一次服务器,更要命的是不知道什么时候会由于内存不足导致无法访问,如果重启不及时严重影响系统体验。
为了解决上述问题,一方面是对tomcat配置做一些优化,网上有很多文章讲解如何优化tomcat内存设置;另一方面就是写一个shell脚本,每天定时重启tomcat服务。这里主要记录一下如何写shell脚本并且配置定时任务。本人使用的环境是阿里云ubuntu服务器,以下配置在阿里云的ubuntu服务器上能正常运行。
一、创建shell脚本
新建一个tomcat.sh文件,输入以下内容:
#!/bin/bash . /etc/profile tomcatpath="/usr/local/tomcat" binpath="$tomcatpath/bin" echo "[info][$(date +'%f %h:%m:%s')]正在监控tomcat,路径:$tomcatpath" pid=`ps -ef | grep tomcat | grep -w $tomcatpath | grep -v 'grep' | awk '{print $2}'` if [ -n "$pid" ]; then echo "[info][$(date +'%f %h:%m:%s')]tomcat进程为:$pid" echo "[info][$(date +'%f %h:%m:%s')]tomcat已经启动,准备使用shutdown命令关闭..." $binpath"/shutdown.sh" sleep 2 pid=`ps -ef | grep tomcat | grep -w $tomcatpath | grep -v 'grep' | awk '{print $2}'` if [ -n "$pid" ]; then echo "[info][$(date +'%f %h:%m:%s')]使用shutdown命令关闭失败,准备kill进程..." kill -9 $pid echo "[info][$(date +'%f %h:%m:%s')]kill进程完毕!" sleep 1 else echo "[info][$(date +'%f %h:%m:%s')]使用shutdown命令关闭成功!" fi else echo "[info][$(date +'%f %h:%m:%s')]tomcat未启动!" fi echo "[info][$(date +'%f %h:%m:%s')]准备启动tomcat..." $binpath"/startup.sh"
脚本的逻辑比较简单,先查看tomcat进程是否存在,如果不存在则直接调用startup.sh命令启动tomcat,如果tomcat的进程存在则调用shutdown.sh命令停掉tomcat服务,有时会关闭失败,所以在检查一下tomcat进程时候还存在,如果存在就使用kill命令杀掉该进程,然后启动tomcat。
这里有一个地方需要注意,第二行代码(. /etc/profile)不能省掉,需要将环境变量引入到当前脚本环境中,要不然会导致启动定时任务时运行脚本失败,会报以下错误:
neither the java_home nor the jre_home environment variable is defined at least one of these environment variable is needed to run this program
二、修改文件权限
要让脚本可以执行,当然要把文件设置为可执行文件了。
chmod 777 tomcat.sh
三、建立定时任务
在控制台上输入使用crontab -e 命令进入编辑crontab脚本,第一次输入该命令时需要选择编辑器。
选择vim编辑器编辑就可,在文件后面增加一条任务。(我的脚本文件路径是:/home/script/tomcat.sh)
然后保存并退出即可,接着使用crontab -l命令即可看到刚才新增的定时任务在列表里面。一般情况是直接生效,如果没有生效可以使用sudo service cron restart命令重启定时任务。
sudo service cron restart
四、定时任务描述语法
crontab中每一个定时任务的格式由6部分组成,分别是分钟、小时、天、月、星期以及命令,前5部分用来配置任务触发时机,中间使用空格隔开,如下:
minute hour day month dayofweek command
minute – 表示分钟,值的范围是从0到59的整数
hour – 表示小时,值的范围是从0到23的整数
day – 表示天,值的范围是从1到31的整数
month – 表示月,值的范围是从1到12的整数
dayofweek – 表示星期,值的范围是从0到6的整数 (0表示周日)
command – 需要执行的命令(/home/script/tomcat.sh > /home/script/shlog.txt表示执行tomcat.sh脚本,并且把结果日志打印到shlo.txt中)
时间部分除了使用估计数字以外还可以配合星号(*),逗号(,),斜杠(/),横杠(-)组合来表示其他意义。
1. 星号(*)
表示任意值,比如:
30 01 * * * command #每天的1:30执行命令
2. 逗号(,)
表示指定的时间,比如:
30 01 1,10,20 * * command #每月的1号、10号、20号的1:30分执行命令
3. 斜杠(/)
表示每隔多长时间,比如:
* */2 * * * command #每个2小时执行一次命令
4. 横杠(-)
表示连续时间,比如:
* 1-7/1 * * * command #凌晨1点-7点之前每隔一小时执行一次命令
五、其他
到此这篇关于linux系统上实现定时重启tomcat服务脚本介绍的文章就介绍到这了,更多相关linux系统 定时重启tomcat内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!