使用logrotate实现日志文件自定义切割保存

本文介绍了如何使用logrotate实现nginx日志的自定义切割和保存,以避免日志文件过大。通过创建配置文件、测试配置、添加到crontab以及考虑定时任务时间,确保日志按天切割并保留30天。选择通过crontab自定义任务以满足特定时间需求,同时避免影响系统默认设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景:

       我们的nginx日志文件之前没有做归档保存,导致日益增大,以后会越来越大直到打不开,因此我们希望实现自定义归档保存,比如:按天切割日志归档保存,最多保存30天的日志文件。

二、logrotate实现全流程记录:

(1)检查是否安装了logrotate,默认系统自带:

         执行命令:logrotate --help

(2)在任意你想存放的目录下新建一个配置文件,比如我直接放在了nginx的日志目录logs下:  /app/nginx/nginx/logs/nginx_log_split.conf 

# 需要注意,下面内容中的路径需要根据实际进行调整
/app/nginx/nginx/logs/*.log {
        daily
        dateext
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
        create 0644 root root
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                [ -s /app/nginx/nginx/logs/nginx.pid ] && kill -USR1 `cat /app/nginx/nginx/logs/nginx.pid`
        endscript
}

(3)测试配置是否正确:
  执行sudo logrotate -f /app/nginx/nginx/logs/nginx_log_split.conf ,查看结果是否符合预期

(4)添加到crontab中:
   执行sudo crontab -e进入编辑页面,添加任务到最下方:

# nginx log
59 23 * * * sudo logrotate -f /app/nginx/nginx/logs/nginx_log_split.conf >/dev/null 2>&1

(5)验证定时任务是否正常

三、补充说明:

需要注意的是,默认情况下,系统会自动执行放在/etc/logrotate.d/目录下的配置文件,默认的定时任务配置如下图,在每天早上6:25会执行daily的任务,

因此,如果上面第(2)步中将配置文件放在/etc/logrotate.d/目录下,那么就不需要自己添加crontab任务了。

但是这样有个问题就是,在每天早上6:25进行归档日志文件不符合我们的预期(一般是每天的23:59),为了符合我们的预期,有两个方法:

1、修改下图中的默认配置,将 25 6 改成我们想要的 59 23,但是这样会影响到所有daily的归档任务,风险较大。因此没有采用

2、自定义存放配置文件的位置,通过crontab -e自行添加定时任务来实现(详见上面步骤),这样符合了我们的预期,也不影响其它全局性的默认配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值