因为使用阿里云部署服务器应用时,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点之前每隔一小时执行一次命令

五、其他

以上哪里写的不对或者有待改进,欢迎大家提意见,谢谢!
下载地址:tomcat.sh
转载请注明出处:http://www.luoxudong.com/?p=330

Linux系统上实现定时重启Tomcat服务相关推荐

  1. linux定时重启tomcat的脚本,linux定时重启tomcat服务的脚本学习

    要求:在linux中定时重启一个tomcat服务 一:shell脚本即Shell Script [1],Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便 ...

  2. 如何在Linux操作系统定时重启Tomcat服务?

    如何在Linux操作系统定时重启Tomcat服务? 背景: 正常情况下启动和关闭tomcat程序命令如下: /application/tomcat/bin/startup.sh /applicatio ...

  3. Linux系统上Crontab定时执行教程

    Linux系统上Crontab定时执行教程 常用格式示例 每五分钟执行  */5 * * * * 每小时执行     0 * * * * 每天执行        0 0 * * * 每周执行      ...

  4. Linux系统上安装JDK和Tomcat服务器

    一.安装JDK 1.查看当前Linux系统是否已经安装java  输入命令: rpm -qa | grep java 2.卸载两个openJDK  输入命令:rpm -e --nodeps 3.上传j ...

  5. Linux下使用crontab定时重启java服务

    最近不知道为什么公司某些服务包莫名的运行着运行着就死了,但是还是运行状态,就是各种接口调不通,重启服务后就没问题了,但是需要每天重启,所以写了个脚本: 第一步:编写shell脚本 .sh脚本内容,我这 ...

  6. linux snap exe,在Linux系统上安装官方Snap Store应用程序

    本文介绍在Linux操作系统上安装官方Snap Store应用程序的方法,内容包括启用Snap支持.安装Snap Store及配置.从Snap Store安装软件及卸载软件.注意:Snap存储有时在非 ...

  7. 定时每天凌晨一点在linux系统上执行一个autobuild.sh脚本如何实现?

    定时每天凌晨一点在linux系统上执行一个autobuild.sh脚本如何实现? 可以使用linux的计划任务功能crontab来实现定时执行脚本. 具体步骤如下: 编辑crontab计划任务列表: ...

  8. Windows系统下制作定时器定时重启某个服务

    今天突然想到,如果想要重启某个服务,必须得手点,但是如果自己不在电脑跟前,或者使用的是远程主机,那么你就还需要打开远程,再进行重新启动.这个时候你就需要一个自动重启的功能,由于网上的资料并不多,自己在 ...

  9. JAVA性能优化,从此不再重启tomcat服务

    关注微信公众号 "数联生活"关注后一起提升,然后点击右上角三个点,设为"星标",获取更多技术.职场和其它高价值资讯.后台回复关键词[java]获取史上最强[ja ...

最新文章

  1. 谷歌和伯克利分校的新工作:规模化大场景的神经绘制方法Block-NeRF
  2. 闲话WPF之二四(WPF中的ControlTemplate [2])
  3. Spring Cloud - 服务消费者Ribbon
  4. 地图的平移、缩放的实现(android版)
  5. LeetCode 617合并二叉树-简单
  6. Codeforces Round #654 (Div. 2)
  7. Elasticsearch教程(六) elasticsearch Client创建
  8. Effective_STL 学习笔记(九) 在删除选项中仔细选择
  9. 使用自定义端口连接SQL Server 2008的方法
  10. 数理统计与描述性分析
  11. BitBake用户手册-3.语法和操作
  12. 用计算机写作文的好处,第7课 用计算机写作文教案
  13. 高德地图API之定位API
  14. 利用批处理文件快速设置IP地址
  15. 浏览器无法上网解决方案
  16. 计算机二级考过律,计算机二级考试考完后的这些事情你知道吗?
  17. Nexus的权限管理
  18. C语言绕过杀毒软件,易语言插件规避杀毒软件方法
  19. sql将日期格式化特定的字符串格式
  20. 简易凯撒密码实现,很容易

热门文章

  1. [北大张铭 教学版]数据结构与算法(C++)
  2. 遍历map集合的四种方法
  3. oracle中没有ctxsys用户,Oracle自带全文索引
  4. 常用的Essay写作句型怎么详细分析?
  5. Plecs电力电子仿真专业教程-第一季 第二节 Plecs功能介绍
  6. 【系统分析师之路】2022上论文写作历年真题
  7. linux 命令行 time,Linux 命令行日常交互篇
  8. 天秀!花费 200W 设计的新版“小米”logo,看看用Python怎么绘制?
  9. PC客户端UI自动化
  10. linux apt 卸载mysql_linux怎么干净卸载mysql