这两天项目有个需求说希望可以定时重启tomcat,然后临时研究了一下,在这里记录一下吧
分析
首先,我觉得要实现定时自动启停tomcat要分四步:
- 找到tomcat的pid
- 停止现在正在跑的tomcat实例
- 启动tomcat实例
- 用定时任务定期跑上面的逻辑
实现
自动启停脚本
自动启停脚本test.sh,具体内容如下:
#!/bin/sh
. /etc/profile
# 根据jps-v命令和关键字查询到具体的应用,通过awk命令只显示第一列
pid=`jps -v | grep /home/apache-tomcat-8.5.56-dev9001 | awk '{print $1}'`
#输出一下找到的pid
echo "/home/apache-tomcat-8.5.56-dev9001 pid is $pid"
echo "tomcat kill"
#直接kill -9干掉,这里其实有优化的空间。一方面可以判断一下pid是否存在,另一方可以用kill慢慢关
kill -9 $pid
#这里有个坑,如果没有下面这个sleep 1,再启动时,会报端口冲突。感觉kill命令不像是在当前线程执行的
sleep 1
echo "tomcat kill success!"
echo "begin delete logs"
#这里就是为了清一下日志,真正需要保存的日志都通过log4j重定向到别的地方去了
rm -rf /home/apache-tomcat-8.5.56-dev9001/logs
mkdir /home/apache-tomcat-8.5.56-dev9001/logs
echo "log delete success!"
echo "begin start..."
# 执行启动脚本
sh /home/apache-tomcat-8.5.56-dev9001/bin/startup.sh
定时任务
当我们有了自动启停的脚本之后,只需要使用linux的定时任务定时执行脚本就可以了。执行下面的命令添加定时任务
vi /etc/crontab
执行之后可以到这样页面,不得不说,linux上注释写的不错啊…
然后,因为我需要每天6点自动重启tomcat服务,那我就这么写就可以了,同时将日志重定向一下,方便日后排查
0 6 * * * root sh /root/test.sh>>/root/test-sh.log
写完之后是这样的:
最后,实用下面的命令重启一下定时任务:
service crond restart
总结
- 通过这个问题了解了linux上如何对变量进行赋值以及awk命令的简单实用
- 上面的脚本还是有优化空间的
- 了解了linux上定时任务如何配置