更好的方法,跨平台(不依赖平台,比如阿里云的后台)的方法是:spring boot 定时任务,直接在程序里写定时清除日志的任务;以后再说;

============================================

新方法是,利用云平台的功能,举例阿里云:

 

如:rm -f /usr/local/tomcat/apache-tomcat-9.0.31/logs/*

但是 ,若仅仅像上面那样删除日志,会导致tomcat异常,因为logs目录下 以后不再会有任何日志,可能tomcat发现核心日志文件不存在后(catalina.out 、host-manager.log 等等,具体哪些是核心,咱也不知道)出了异常;

解决方法是重启下:reboot;

 

综合起来就是:

rm -f /usr/local/tomcat/apache-tomcat-9.0.31/logs/* && reboot; && 的意思是只有上条命令执行成功的情况下,才执行 下一条命令;

 

 

=========================以下是旧方法====================================

问题描述,很多时候我们都会遇到 tomcat 日志满的问题,尤其是catalina.out 可能过段时间会达到几十个G的大小,这个时候千万不要用vi来打开他,会直接暴死。

然而很遗憾的是针对这个问题,tomcat从5 - tomcat9 都没有解决,即10年都没有解决,看来需要 程序员自己想法解决。若不解决,那么catalina.out会越来越大,最终导致磁盘满,

应用出现不稳定的情况,我之前遇到过3次,黄俊也遇到了 基本上这个问题 必须彻彻底底的解决掉。

解决方法1:

https://blog.csdn.net/shaonaozu/article/details/52325589?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-9

https://blog.csdn.net/u012365843/article/details/100039849?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-19.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-19.nonecase

如果Tomcat的catalina.out日志文件不关闭,该文件会记录所有的Tomcat日志信息,时间长了该文件会非常大的,这样会占用很大的磁盘空间的。所以我们一般都是每个项目独自记录想要看到的日志信息,而不是所有的日志信息。

关闭catalina.out打印日志:

1.在Tomcat的bin目录下找到catalina.sh

2.修改catalina.sh中的对应信息

if [ -z "$CATALINA_OUT" ] ; then
  #CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
  CATALINA_OUT=/dev/null
fi

3.保存catalina.sh文件并重启Tomcat就OK了!

 

这种方法虽然可以,但是 程序并不会 向catalina.out里输出日志了,导致开发调试的时候  看不到 任何日志 非常不便于调试,废弃这种方法。

 

解决方案2:既然日志会满,那么能否通过写脚本来定时清除呢,比如每天晚上 12点 清除一次 catalina.out,不需要重启tomcat,因为仅仅是清空了日志,并没有删除文件,tomcat是可以继续写入日志的。

1. 需要安装centos定时器软件,

yum install crontabs

 

 

 

2.检查 这个定时器软件是否开机自动启动了。

可参考:https://www.cnblogs.com/ftl1012/p/crontab.html

systemctl list-unit-files |grep crond   检查是否存在这个服务

systemctl status crond.service   检查 这个服务当前的状态

 

 

 

 

3. 编写定时清空 catalina.out 的linux脚本。

#!/bin/sh
echo -n "" > /usr/local/tomcat/apache-tomcat-9.0.31/logs/catalina.out
exit

 

 

 

 

 

 4.编写定时器,加入定时任务。

crontab -e //编辑当前用户的crontab文件 默认保存在了/var/spool/cron/里 如下【切记这步一定要用vi直接编辑,不可下载到本地编辑再上传的方式】:

 

0 9 * * * /usr/local/tomcat/apache-tomcat-9.0.31/bin/clear_catalina_out.sh > /dev/null 2>&1   ---  每天上午9点执行,算了,这个还是保存3天的日志吧,方便紧急情况下 查看解决问题。用下面的,每间隔3天的凌晨执行一次。

 

0 0 */3 * * /usr/local/tomcat/apache-tomcat-9.0.31/bin/clear_catalina_out.sh > /dev/null 2>&1

 

 

 

 

按 i 键 粘贴内容后,按esc键 退出编辑 然后输入 :wq 保存就可。

 

 

 

 

 

 

 

其它说明:0 9 * * * 的解释问题 可以百度,举例:https://tool.lu/crontab/ 这个网站 或 https://blog.csdn.net/xinyflove/article/details/83178876 这个说明

 

 

 

 

 

 

 

 

5. 虽然定时删除了 catalina.out,但是还是有其他很多日志,占据空间,这个时候,还需要设置一下 tomcat的其它日志保留日期:

 

 

 

 

 

 

 

 

 

 

 

 

修改好后,上传就可。

 

6.至此就结束了,reboot重启服务器。就可以制作镜像了。

 

===========================================================================================================

测试,是否会正确执行,让他每分钟执行一次:

 

*/1 * * * * /usr/local/tomcat/apache-tomcat-9.0.31/bin/clear_catalina_out.sh > /dev/null 2>&1

 

切记这步一定要用vi,不可先下载到本地再编辑的方式;

crontab -e  来进行编辑 

 

 

 

 然后重启,开始测试,看下 catalina.out 是否会 每分钟 被清空一次。看到通过下面【gif】看到,是正确执行了!!!!!

 

 

定时器也是有运行日志的,他的运行日志在这里,我们可以看下:

 

 

 

=============================================================================================================

其它辅助,与本篇无关,当不知所措的时候 可以观察:

 

 

posted on 2020-05-27 17:15  del88  阅读(9)  评论(0编辑  收藏  举报