当前位置: 首页 > Linux

linux定时清理日志和catalina日志拆分

时间:2023-04-06 04:30:00 Linux

陷阱除了开发工作,我还有一项琐碎的工作,就是每天定时查看与网站相关的linux机器的运行状态。一开始,Linux机器运行正常,我放松了很多,从每天检查到每周检查一两次。后来网站经常被不明来源攻击,导致部分后台组件崩溃(这个问题有空会在另一篇博文中讨论),但是网站服务器依然运行良好。但是坏事还是来了,然后就在一个月前,老大突然接到报告说Linux服务器的磁盘使用率达到了90%以上!我这下有些慌了,赶紧检查机器的运转情况。发现官方环境机器的磁盘tomcat安装目录占用30多G(共44G)。du-sh/home/tomcat#-s表示统计总和,单位为G;-h表示统计每个文件的大小du-bs/home/tomcat#-b表示统计单位是bitedf-h#统计查看系统的磁盘利用率,分为物理利用率和逻辑利用率速度。老大提示是和日志文件有关。进去看看logs文件夹。果然,日志文件估计有上百个,大小不一。嗯,是你!填坑措施一:rm-rffilepath刚开始,为了快速解决这个问题,干脆直接用rm命令删除,只保留一个月以内的日志。rm-rflogs/*2017*.log&&rm-rflogs/*201801*.log&&rm-rflogs/*201802*.log再次使用df-h查看磁盘,已经下降到70%左右,嗯,没关系,然后照样把其他几台机器的旧日志删掉。呵呵,就这几次,我也太小看自己的名声了。做了以上操作后,我以为我可以安静的休息一个星期了。但是没想到第二天就收到了报警信息。我去那里杀了我。前段时间的袭击已经够麻烦了,不能在这里出事!仔细检查剩余的几个日志文件,所有这些文件的大小都可以接受。比较比较后发现是catalina.out文件导致的灾难。看大小,20多G,算你狠!措施二:拆分catalina日志有网友在网上查找资料后,推荐使用logrotate日志轮询进行日志拆分。好吧,让我们开始吧。现在在/etc/logrotate.d/下创建你自己的轮询任务文件tomcat:cat>/etc/logrotate.d/tomcat<>/home/hsip-monitor/deletelogs.log配置说明如下:-crontab定时配置说明:*(分)*(时)*(日)*(月)*(周)-root指定用户,后面是需要的.sh文件被执行。这里我们也将执行日志输出到日志文件中,以供日后参考。好了,设置完成,观察几天运行,看看效果如何。问题与优化crontab任务没有执行。设置crontab定时任务清空日志后,第二天观察日志和文件,发现定时任务一直没有执行。在网上查了很多资料都无果。可以弄清楚以下几点:使用crontab-l命令发现系统没有显示任何计划任务列表;使用crontab-e创建任务文件,在文件中写入第2项所示的定时任务,然后再次查看定时任务列表,有上面添加的任务;在上述解决方案没有解决问题后,仔细查看了crontab定时任务,发现博文定时任务命令中缺少sh执行命令。虽然看了很多博文,但是执行sh脚本,前面没有sh命令。不知道为什么别人能执行,我这里加不上。添加sh之后,定时任务就可以正常运行了;不执行Catalina自动旋转。测试机可以很好的拆分catalina日志,很多解决方案都没有找到。在解决了crontab定时任务无法解决的问题后,我突然有了一个想法,为什么不能对crontab定时任务写logrotate--force/etc/logrotate.d/tomcat呢?照办吧,创建cutoffCatalina.sh文件,就等明天的执行结果吧。#!/bin/bash/usr/sbin/logrotate--force/etc/logrotate.d/tomcatif[$?-eq0];thenecho-e`date`"cutcatalina.outsuccessful!\\n"elseecho-e`date`"cutcatalina.outfailed!\\n"fi还在/etc/crontab文件中添加如下配置5023***rootsh/home/hsip-monitor/cutoffCatalina.sh>>/home/hsip-monitor/cutoffCatalina.log不过很可惜的是写到脚本中执行,执行也失败。怀疑正在操作日志文件,所以无法完成拆分。后来老大也提醒了,是不是跟catalina在读写有关系?于是找了一个用户访问量低的时间(凌晨5点左右),重新配置:304***rootsh/home/hsip-monitor/cutoffCatalina.sh>>/home/hsip-monitor/cutoffCatalina.log然后还有一个比较有意思的情况:日志在官方环境下分为catalina.out.1.gz,但是在测试机上却分为catalina.out-20180314.gz,也就是说:当Catalina是读写,我们的脚本执行成功,即--force参数有效。logrotate轮询机制被触发。Catalina读写时,轮询失败,否则可以成功执行。成功后,拆分文件以时间戳排序。还有的发现在搜索解决问题的过程中,有网友不知道描述的方法行不行,网友也没有说为什么linux-logrotate管理拆分nginx日志无效-SegmentFault思不)。好吧,我们先这样设置官方机器,然后确定。【超过】