用 cron + logrotate 管理日志轮转

Cold 发布于 2023-04-17 27 次阅读 332 字 预计阅读时间: 2 分钟 Linux服务器


日志不轮转,迟早把磁盘写满。logrotate 是 Linux 自带的日志管理工具,配合 cron 自动执行。

配置文件位置

  • /etc/logrotate.conf:全局配置
  • /etc/logrotate.d/:各服务单独配置,推荐放这里

一个典型配置

/var/log/myapp/*.log {
    daily
    rotate 14
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    dateext
    dateformat -%Y%m%d
    create 0640 www-data www-data
}

逐项说明:

  • daily:每天轮转,也可用 size 100M 按大小
  • rotate 14:保留 14 份
  • missingok:文件不存在不报错
  • notifempty:空文件不轮转
  • compress:压缩旧日志
  • delaycompress:延迟一次压缩,方便最近一份还能直接看
  • copytruncate:复制后清空原文件,适合不支持重开日志的进程
  • dateext:用日期做后缀,比数字后缀直观

测试

# 调试模式,不实际执行
logrotate -d /etc/logrotate.d/myapp

# 强制立即轮转一次
logrotate -f /etc/logrotate.d/myapp

copytruncate 还是 create

  • 程序支持收到信号后重开日志(如 Nginx):用 create + postrotate 发信号,更安全
  • 程序不支持(如某些 Java 应用):用 copytruncate,但有极短时间可能丢日志

cron 执行

logrotate 一般由 /etc/cron.daily/logrotate 每天触发,不需要自己写 cron。如果是自定义时间,可以加一条:

0 3 * * * /usr/sbin/logrotate /etc/logrotate.d/myapp

配好之后,磁盘再也没因为日志满过。

和喜欢的一切在一起~
最后更新于 2023-04-17