服务器有个调度任务,每天会产生大量日志,一直采用人工删除方式。
查看服务器脚本后发现有个定时删除任务:
逻辑是:每天删除一次三天前修改的日志,即以文件的修改时间为判断条件。
现实是:
1. 每天写日志时会关联之前的日志,导致之前产生的日志的修改时间一直是当天,无法成功删除。
2. 另一个问题是,采用rm -rf命令删除,删除文件后,进程未释放占用空间,依然需要手动 kill 进程。
解决思路
一开始的思路是,写个JAVA脚本自动去删除文件,清理进程。难点在于,我对Linux不熟悉,一开始不知道怎么去判断删除文件后的进程(服务器上还有别的已删除文件进程需要保留)。遂作罢。
转折点
在查找清理大文件日志的情况下,发现有博主建议用重定向文件流的方式去清理大文件日志。一番试用后决定采用echo 1 > '文件名'这种方式来清理日志文件。
难点1
因为日志文件的命名方式是XXX_日期。有序排列。一开始想的是根据文件名这样的格式去判断三天前的日志。后发现用find命令去做匹配不太好做。
最后改为用find命令通过文件大小去拿日志文件名
find / -size +100G
遗留问题1
如果一天输出的日志超过了100G,咋办。日志是要保留前一天的文件。
难点2
find
Linux日志清理:find命令结合exec的实践

本文记录了一位工程师在Linux服务器上清理日志文件的过程。起初,由于日志文件的修改时间问题和删除后进程占用空间,导致定时任务无法有效清理。经过转折,他采用了find命令结合重定向和truncate命令来解决,最终实现自动清理并附带了查找已删除文件相关进程的方法。
最低0.47元/天 解锁文章
1644

被折叠的 条评论
为什么被折叠?



