linux自动清理管理日志文件 logrotate

logrotate是linux通常会自带的工具,可以自动切割清理日志文件

一、安装(通常无需)

通常系统自带

sudo apt install logrotate

或者

sudo dnf install logrotate

二、具体使用

以nginx日志为例

1.创建脚本文件

vi /etc/logrotate.d/nginx

2.编辑以下内容

注意创建日志的用户组和用户,我这里写的都是root,应该换成你自己的(create 640 root root这一行)
使用通配符 /var/log/nginx/*.log来处理多个文件,如果你的日志在别的目录,这里也要修改
rotate 90 保留90天日志,这行后面不能加#注释
我这里有超过1个目录的nginx需要管理,所以共用一个脚本来处理,只需要并列写就行
postrotate中的判断功能是为了避免多次重新打开日志。
该日志处理不会影响nginx正常运行

/var/log/nginx/*.log /var/log/nginx2/*.log /var/log/nginx3/*.log{
    daily                 # 每天切割日志
    missingok             # 如果文件不存在则跳过
    rotate 90
    compress              # 压缩旧日志文件
    delaycompress         # 延迟压缩,以防止在 Nginx 重新写入前被压缩
    notifempty            # 如果日志为空则不处理
    su root root
    sharedscripts
    postrotate
        # 让 Nginx 重新打开日志文件
        if [ -f /run/nginx.pid ]; then
            kill -USR1 $(cat /run/nginx.pid) >/dev/null 2>&1
        fi
    endscript
}

3.手动运行测试

sudo logrotate -f /etc/logrotate.d/nginx

三、logrotate 的执行时间

logrotate 是搭配cron定时任务执行的,所以具体的执行时间在cron

1.logrotate是通过cron.daily执行的

查看

cat /etc/cron.daily/logrotate

2.cron.daily 的执行时间由 /etc/crontab 控制

cat /etc/crontab

在这里插入图片描述
我这里每日的在6点25分执行,这里需要考虑你的服务器时间。
如果使用默认的utc时间,那换算成北京时间就是14:25执行,这样就变成了在高峰期执行,需要改时间,如果你的服务器时间就是utc+8,这里就不用改了

/etc/crontab 修改后保存即可,无需重启,会自动生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziqibit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值