Linux 日志轮转(Log Rotation)

1.创建文件

/etc/logrotate.d/test

2.test 文件内容

/var/www/your-project/logs/ban.log {
    daily           # 每天执行一次轮转(把当前日志更名,新开一个空文件)
    missingok       # 如果日志文件丢失了,不要报错
    rotate 7        # 保留最近 7 天的日志,超过 7 天的旧日志会被自动删除
    compress        # 对旧日志进行 gzip 压缩,节省硬盘空间
    notifempty      # 如果日志是空的,就不进行轮转
    create 0644 www-data www-data # 创建新日志文件时的权限和所属用户(需匹配你 Web 服务器的用户)
}

# nignx 日志
/home/wwwlogs/*.log {
    monthly             # 按月轮转
    rotate 6            # 保留 6 份(即半年)
    size 30M            # 文件超过 30M 时触发轮转(即使不到一个月也会切分)
    missingok           # 如果日志文件丢失,忽略错误
    notifempty          # 如果日志为空,不进行轮转
    compress            # 启用压缩,节省空间
    delaycompress       # 延迟压缩(下一次轮转再压缩旧文件,防止 Nginx 还没释放句柄)
    dateext             # 使用日期作为后缀(方便识别是哪个月的)
    dateformat -%Y%m%d  # 日期格式
    sharedscripts       # 所有的日志轮转完后只执行一次脚本
    #指令块:检查进程pid文件是否存在 & 触发重新打开日志的USR1信号
    postrotate
        [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    endscript
}

3.执行配置文件

logrotate -d /etc/logrotate.d/nginx_custom # 测试

logrotate -f /etc/logrotate.d/nginx_custom # 强制立即执行

4.无需重启服务。系统每天会自动运行一次 logrotate 任务。

logrotate 就像一个“勤杂工”,定期把旧日志打包压缩,并删除太久远的日志。

 

posted @ 2026-03-10 17:38  xiaobingch  阅读(31)  评论(0)    收藏  举报