logrotate定时每秒按指定大小切割日志

方案说明

系统:Ubuntu Server 20.04
方案:在crontab中添加一个每分钟都执行的脚本,此脚本每秒使用logrotate切割日志文件
以JAVA项目为例,在JAR包同级目录下有如下文件↓↓↓↓
在这里插入图片描述

logrotate方案配置

test-logrotate文件

/root/Desktop/test/nohup.d/nohup.out
{
  size=5M
  rotate 10
  copytruncate
  notifempty
}

说明:用此配置切割/root/Desktop/test/nohup.d/目录下的nohup.out文件;当nohup.out大小>=5M时,执行一次切割,最多保留10份(一次切割生成一份新的日志文件,命名为nohup.out.x,x的取值范围为1-10);切割完毕后清空nohup.out;如果nohup.out是空的,则不切割。
注意:logrotate只能通过size判断文件大小是否满足切割,至于切割后的文件大小无法保证。对于如上配置,如果初始的nohup.out大小为500M,logrotate判断大于5M需要切割,切割出来的新文件大小还是500M。如果日志文件增长过快,比如达到了20M/S,那么logrotate每秒切割完后的文件大小肯定也是≥20M的。遇到这种情况,就需要考虑提高切割的频率。

循环切割脚本

test-crontab.sh

#!/bin/bash
for (( i = 0; i < 60; i++ )); 
do
    /usr/sbin/logrotate /root/Desktop/test/test-logrotate
    sleep 1
done
exit 0

说明:循环执行logrotate切割命令60次,间隔为1秒

crontab定时任务

将脚本加入到crontab中,设置每分钟执行一次(crontab定时任务执行周期最低为分钟)
输入crontab -e
在这里插入图片描述
输入如下命令并保存

* * * * * bash /root/Desktop/test/test-crontab.sh

输入crontab -l可查看已开启的定时任务

运行结果

运行.jar文件,将java控制台输出的内容存放至nohup.out文件

nohup java -jar /root/Desktop/test/logtest-1.0.jar >> /root/Desktop/test/nohup.d/nohup.out 2>&1 &

一段时间过后,日志目录下的文件↓↓↓↓
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
可以使用Linux系统中自带的Logrotate工具来实现按日志大小切割日志Logrotate是一个日志文件管理工具,它可以周期性地检查、分析、压缩和删除日志文件。这个工具可以通过配置文件来实现对日志文件的管理。 以下是一个示例配置文件,你可以根据需要进行修改: ``` /path/to/log/file.log { rotate 7 # 保留最近7个日志文件 daily # 每天执行一次日志轮转 missingok # 如果文件不存在也不报错 notifempty # 如果文件为空也不轮转 copytruncate # 复制并截断原始日志文件,防止日志写入被中断 compress # 压缩轮转后的日志文件 delaycompress # 压缩上一次轮转后的日志文件 size 100M # 超过100M时进行轮转 } ``` 上面的配置文件将指定`/path/to/log/file.log`文件按照每天进行轮转,保留最近7个日志文件,如果文件不存在或者文件为空也不报错,同时在复制原始日志文件时进行截断,防止日志写入被中断,压缩轮转后的日志文件,延迟压缩上一次轮转后的日志文件,并且当日志文件大小超过100M时进行轮转。 将上面的配置文件保存为`/etc/logrotate.d/mylog`,然后执行以下命令来测试轮转: ``` logrotate -d /etc/logrotate.d/mylog ``` 如果一切正常,执行以下命令来进行轮转: ``` logrotate -f /etc/logrotate.d/mylog ``` Logrotate工具还可以实现其他功能,你可以查看其官方文档来了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值