logrotate 不生效的 7 个检查点:从执行状态到配置覆盖

logrotate简介 对于大多数应用程序来说,日志文件是极其重要的工具。logrotate是一个日志文件管理工具,用于分割日志文件,删除旧的日志文件,创建新的日志文件,起到“转储”作用,节省磁盘空间。 1. logrotate简介 Linux默认自带logrotate,配置文件是/etc/logrotate.conf。/etc/logrotate.d是一个目录,其中所有文件都会被读入/etc/logrotate.conf中执行,我们可以在/etc/logrotate.d目录里放置自定义的配置文件,用来覆盖/etc/logrota 阅读详情

摘要

logrotate 配置存在但日志持续增长的 7 个检查点:执行状态与 status 记账、size 与 daily 的优先级、配置文件权限被忽略、同一路径被多份配置覆盖、nginx 需发 USR1 重开文件、dateext 撞名静默跳过、已删除文件仍占用空间。含配置模板、-d/-f 验证流程与容量估算方法。


 现象与环境

/etc/logrotate.d/ 下已有对应配置,日志文件仍持续增长,df -h 显示分区使用率上升。

环境:Ubuntu 22.04(logrotate 3.19)、CentOS 7(logrotate 3.8)、nginx 1.20+、systemd。路径与用户需按实际替换。

1. 判定分层

现象

结论方向

检查点

status 无该日志记录

未被匹配 / 被跳过

① ③ ④

status 有记录但日期很旧

触发了但没转成

⑤ ⑥

转了但空间不减

进程仍持有旧 inode

⑤ ⑦

2. 七个检查点

① 执行状态

systemctl list-timers --all | grep -i logrotate
journalctl -u logrotate --since "-7 days" --no-pager | tail -20
tail -5 /var/lib/logrotate/status

status 每行格式为「路径 上次轮转的日期」,日期停滞即未处理。

② size 与 daily 的优先级

指令

语义

daily

每天一次,不看大小

size N

只看大小,时间条件失效

minsize N

时间到且大于 N 才转

size 与 daily 并存时 size 生效,daily 被忽略。

③ 配置文件权限

ls -l /etc/logrotate.d/
# 要求 -rw-r--r-- 属主 root;组或其他可写会被忽略

④ 同一路径被多份配置覆盖

grep -rn "access.log" /etc/logrotate.d /etc/logrotate.conf

后读到的配置覆盖先读到的,不合并。include 按文件名顺序读取。

⑤ nginx 日志需信号重开

ls -l /proc/$(cat /run/nginx.pid)/fd | grep log

指向 *.log.1 或带 (deleted) 即为未重开,需 postrotate 发 USR1。

⑥ dateext 撞名

同日重复 -f 时目标文件已存在,静默跳过,不报错。

⑦ 已删除文件占用

lsof +L1 | grep -i log
3. 配置模板
/var/log/nginx/*.log {
    daily
    minsize 50M
    rotate 14
    maxage 30
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    create 0640 www-data adm
    postrotate
        [ -f /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
    endscript
}

要点:minsize 而非 size(保留时间语义);create 显式指定属主,避免轮转后写不进;sharedscripts 让多个日志只发一次信号。

4. 验证流程
logrotate -d /etc/logrotate.conf          # 空跑,只看解析结果
logrotate -f /etc/logrotate.d/nginx       # 强制一次
ls -l /var/log/nginx/                     # 属主与权限
df -h /var                            # 空间是否释放
tail -3 /var/lib/logrotate/status         # 记账是否更新
5. 容量估算
du -sh /var/log/nginx
awk '{print $10}' /var/log/nginx/access.log | sort -u | wc -l   # 独立 IP 量级参考

日增量 × 保留天数 × 压缩比(文本约 1/10),再乘 2 作为峰值余量。

6. 多机场景的观察方式

四台机器各自配好之后,真正难的是「哪台的配额快到了」这件事没人主动看。逐台登进去 du 一遍太慢,通常的做法是装采集端统一上报。

7. 另一条观察路径

如果不愿在每台机器上装采集端,可以只走 SSH:不装采集 agent,直接读日志目录大小、inode 占用和 status 文件,这类「无 agent 监控」的界面在本地渲染、只走现成的 SSH 通道,服务器侧不装 Web 服务、也不新增端口。

我在四台 VPS 上用极目Linux桌面看这些读数,省得一台台进目录翻;规则写错没有它也不管,那部分只能自己看 -d。

无论哪种方式,选型时建议固定一条:看它是否在服务器上新增对外端口。 新增的端口就是长期要盯的资产。

8. FAQ

Q1:missingok 和 notifempty 能同时写吗?

能,而且经常一起写。missingok 是文件不存在时不报错、静默跳过;notifempty 是文件为空时不轮转。两者语义不冲突:前者管「没有这个文件」,后者管「有这个文件但没内容」。都写上可以避免日志被清理后留下大量报错。

Q2:sharedscripts 是干什么的?

让 prerotate/postrotate 在一批日志处理完后只执行一次,而不是每转一个文件执行一次。nginx、apache 这类一个信号就能重开全部日志的进程必须加,否则 N 个日志就发 N 次信号,日志多的时候会看到明显的服务抖动。只有一两个日志文件的站点,加不加差别不大,没必要为它改配置。

Q3:su 指令什么时候必须写?

当配置文件的属主不是 root、或日志文件属于非 root 用户、而 logrotate 又以 root 身份运行时。不写会报 parent directory has insecure permissions 或直接跳过。写法是 su www-data adm,指定以哪个用户和组去操作文件。

Q4:dateext 生成的旧文件怎么自动清理?

靠 rotate 或 maxage,不是靠文件名。rotate 按份数删最老的,maxage 按天数删。如果用了自定义 dateformat(比如带小时),份数和天数的对应关系会变,需要重新算 rotate 的值,否则保留期会比预期短很多。

Q5:logrotate 能改成每小时跑一次吗?

能。改触发方式就行:不用 cron.daily,在 /etc/cron.d/ 里加一条 0 * * * * root /usr/sbin/logrotate /etc/logrotate.conf,配置里用 hourly 或 size。注意 hourly 在老版本(3.8 以前)不支持,CentOS 7 上得靠 size 或 minsize 控制。

Q6:日志 500MB/天,单机 logrotate 撑得住吗?

撑得住,但要看压缩开销。500MB 文本 gzip 大约需要几秒到十几秒的单核时间,一天一次可以忽略;如果拆成每小时一次,压缩会和业务抢 CPU,建议错开到凌晨或改用 delaycompress 错峰。真正撑不住的是「一天几 G + 只留 30 天」这种组合,那是容量规划问题,不是轮转问题。

Q7:logrotate -f 成功但文件没变,为什么?

三种可能:dateext 目标文件已存在被跳过;配置里 notifempty 而文件为空;-f 指定的路径不是实际生效的那份配置(被另一份覆盖了)。先看 -d 的输出里这条日志有没有被列出,再判断属于哪一种。

Q8:/etc/logrotate.d/ 下的文件名能带扩展名吗?

能,但没必要,而且有坑。logrotate 会跳过 tabooext 列表里的后缀(.rpmnew、.rpmsave、.rpmorig、.dpkg-old、.dpkg-dist 等),带这些后缀的配置不会被执行。用 nginx 这种无后缀命名最稳,也便于 grep 定位。

Ubuntu 12.10 日志轮转实战:logrotate 配置原理与运维避坑指南 日志轮转是 Linux 系统稳定运行的基础保障机制,其核心在于解决日志文件无限增长导致的磁盘耗尽、I/O 性能下降和故障排查困难等问题。其原理基于时间或大小触发的自动化切割、压缩、归档与清理流程,依赖原子性操作(如 copytruncate 或信号通知)确保服务不中断。logrotate 作为 Ubuntu 12.10 默认日志管理工具,具备配置模块化、并发安全、策略灵活等技术优势,显著优于手工脚本或 rsyslog 内置轮转。典型应用场景包括 Web 服务器(Apache/Nginx)、数据库(MySQL 阅读详情

相关推荐

Ubuntu 16.04 日志轮转实战:logrotate 配置、调试与故障排查

日志轮转是 Linux 系统运维的基础能力,其核心在于按时间或大小自动归档、压缩、清理旧日志,同时保障服务持续写入不中断。logrotate 作为 Debian/Ubuntu 官方标配的领域专用工具,通过状态文件、原子切换(copytruncate/postrotate)、权限控制(create)和语义化指令(daily/rotate/compress/delaycompress)实现高可靠性。相比 crontab 脚本,它彻底规避竞态条件、权限失控与状态丢失等工程风险;在 Ubuntu 16.04 中深度

mxdxm8899的专栏 532

Salt logrotate 执行模块实战:logrotate 配置的解析、查询与远程修改

本指南以 Salt 开源仓库中的 [logrotate 执行模块](https://link.gitcode.com/i/a38362bddb03accbb679c39ad6ffc877) 为对象,系统讲解如何通过 `salt '*' logrotate.*` 系列命令对 minion 上的 `/etc/logrotate.conf` 及 include 目录进行读取、查询与就地修改,同时深入剖析

gitblog_00484的博客 681

STM32 ADC精准采集12V电池电压:从分压电路到软件校准全解析

本文详细解析了STM32 ADC精准采集12V电池电压的全过程,涵盖分压电路设计、电阻选型、ADC配置优化及软件校准方法。针对电池电压监测中的噪声、温漂等挑战,提供了硬件滤波与软件过采样等实战技巧,确保测量精度达到1%以内,满足嵌入式设备对电源管理的严苛要求。

tech5的博客 1012

logrotate 的使用简介

对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用...

冻梨不是梨的博客 3万+

FOC-滑膜控制器SMC/滑膜观测器SMO

三相PMSM是一个非线性、强耦合的多变量控制系统,对于外界的扰动或者电机自身的参数发生变化时,传统的PI控制并不能满足实际的要求。因此可以引入滑模控制SMC,它对扰动和参数不敏感,响应速度也够快。简单来说就是,滑膜观测器就是通过采样与坐标变换得到的Ualpha,Ubeta,Ialpha,Ibeta四个参数值,获取。SMO叫滑膜观测器(Sliding Mode Observer),用于获取转子位置信息与转速信息。2、作为滑膜观测器SMO,获取电机角度与转速信息。之间的误差来设计滑膜观测器,并通过该误差。

小胡同学的工程师学习之路 1万+

小龙虾们的好伙伴专栏导航

本文系统解析了OpenClaw技术架构,包括Channel层和网关层的设计实现,并与AgentSkills等技术方案进行对比。同时提供了OpenClaw的系列实用指南,涵盖小龙虾培养、客户资源管理、系统自动化巡检以及技术趋势助手构建等应用场景,帮助用户从零成本入门到高效落地应用,实现业务全流程自动化管理。

wend的博客 210

Linux日志切割工具Logrotate配置详解

logrotare配置

PPlluuttoo的博客 8951

【SECS】初识SECS协议

项目标题的第一位和第二位告诉下面有多少字节表示项目的长度。而项目的长度是指项目标题后面的字节数,这里第一个字节就是项目标题。1个字节可以表示的最大长度是0-255,所以只要项目标题后面的字节数小于等于254,都是0x01。

weixin_48618536的博客 1642

Linux命令之logrotate命令

logrotate旨在简化生成大量日志文件的系统的管理。它允许自动旋转、压缩、删除和邮寄日志文件。每个日志文件可以每天、每周、每月处理,也可以在其增长过大时处理。 通常,logrotate作为日常cron作业运行。除非日志的标准是:根据日志的大小,logrotate每天运行一次以上,或者除非使用-f或--force选项。 可以在命令行上给出任意数量的配置文件。稍后的配置文件可能会覆盖先前文件中给出的选项,因此logrotate配置文件的列出顺序很重要。

月生的静心苑 4594

【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍

Animancer与Unity Animator对比及使用指南 摘要: 本文对比了Animancer与Unity官方Animator的核心差异,分析了Animancer的优势特点。Animancer采用代码驱动模式,相比Animator的状态机系统更灵活高效,支持实时调试、动态混合和深度逻辑集成。文章详细介绍了Animancer的快速使用方法,包括动画播放、切换和触发机制,并区分了免费版与专业版的功能差异。适合需要高效动画开发、复杂交互逻辑的中小项目,为开发者提供了一种现代化的动画解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2434

EMS案例:BMS传导发射超标整改案例

BMS作为新能源汽车的关键部件,其EMC性能直接影响整车的安全性和可靠性。本文通过一个实际的传导发射整改案例,详细展示了从问题定位、分析到解决方案实施的全过程。希望这些经验能够为从事类似产品设计的工程师提供有价值的参考,在未来的产品开发中避免类似问题,设计出更加可靠、稳定的BMS产品。EMC设计是一门结合理论与实践的艺术,只有通过不断积累经验、深入理解电磁场理论,并紧密结合实际应用场景,才能在复杂的电磁环境中设计出鲁棒性强的电子产品。

m0_56451176的博客 272

Linux logrotate 命令详解:日志轮转、压缩与删除的完整配置实战

logrotate 是 Linux 系统中最核心的日志管理工具之一,用于对系统日志进行轮转(切割)、压缩和删除,防止单个日志文件无限膨胀撑爆磁盘。本文以 [command/logrotate.md](https://link.gitcode.com/i/3136fd4ec0762ef5aa3110e77b62d9d6) 为骨架,结合本仓库整理的 [crontab](https://link.git

gitblog_00287的博客 442

基于Simulink环境,提供一个关于如何对EMI抑制的DC-DC变换器进行仿真建模的示例

EMI定义:电磁干扰是指任何能中断、阻碍、降低或限制电气设备有效性能的电磁能量。重要性合规性:确保产品符合国际和地方的EMC标准。可靠性:减少因外部或内部EMI导致的系统故障风险。挑战滤波设计:合理设计输入输出滤波器以抑制传导EMI。布局与接地:良好的PCB设计对于减少辐射EMI至关重要。屏蔽:使用金属屏蔽来保护敏感电路不受外界干扰。首先明确要模拟的任务内容。设计一个能够在高频操作下有效抑制EMI的DC-DC变换器。根据工作频率和谐振元件值确定合适的滤波器参数。

xiaoheshang_123的博客 144

Linux logrotate 使用详解

Linux logrotate 使用详解

beginerToBetter的博客 2447

YOLOv11模型改进-模块-引入空间池化模块StripPooling 解决遮挡、小目标

本文介绍了一种新的空间池化策略,称为,用于场景解析。结构:包括两个平行路径,分别进行水平和垂直方向的条带池化,然后通过1D卷积层进行特征调整。:结合了条带池化和传统的空间池化,分别用于捕捉长距离和短距离的依赖关系。作用捕捉长距离依赖:通过长条形的池化窗口,有效捕捉分布离散的区域之间的关系。避免不相关信息干扰:窄条形的池化窗口有助于捕捉局部上下文,防止不相关区域干扰标签预测。提高场景解析性能:在多个基准数据集上,证明了这种方法能够显著提升场景解析的效果。

qq_64693987的博客 4204

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

linux日志切割神器 —— logrotate

对于大多数应用程序来说,日志文件是极其重要的工具。logrotate是一个日志文件管理工具,用于分割日志文件,删除旧的日志文件,创建新的日志文件,起到“转储”作用,节省磁盘空间。 1. logrotate简介 Linux默认自带logrotate,配置文件是/etc/logrotate.conf。/etc/logrotate.d是一个目录,其中所有文件都会被读入/etc/logrotate.conf中执行,我们可以在/etc/logrotate.d目录里放置自定义的配置文件,用来覆盖/etc/logrota

yjk13703623757的博客 2043

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

使用logrotate切割nginx日志

使用logrotate切割nginx日志

libing__123的博客 1640

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用logrotate对日志文件进行转储

大家会发现,/etc/cron.{daily,weekly,monthly} 目录中的脚本在当前的 Linux 中是被 anacron。/etc/cron.{daily,weekly,monthly} 目录中,就会每天、每周或每月执行,而且也不再需要启动 anacron。可以看出日志已经被轮转到新的文件中了,并创建了一个空的日志文件,其实日志是会被压缩的,不过要在下一次轮转的时候。调用的,不再依靠 cron 服务。日志文件已经是空的了,所以需要访问一下网页,产生一点日志,还需要把时钟时间修改一下。

qq_50247813的博客 1470

logrotate 详解

由这个文件的设定可以知道/etc/logrotate.d其实就是由/etc/logrotate.conf 所规划出来的目录,虽然可以将所有的配置都写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了,尤其是当使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理了。另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以/etc/logrotate.conf这个文件的设定来作为默认值。

糯米导航 6720

Centos7:logrotate的搭建与各个参数详情

本文出自于:奔跑的胖小孩 链接地址:https://blog.youkuaiyun.com/qq_38814358/article/details/106117225 简介 Logrotate 程序是一个日志文件管理工具。用于分割日志文件,压缩转存、删除旧的日志文件,并创建新的日志文件,下面就对logrotate日志轮转的记录: 提示:以下是本篇文章正文内容,下面案例可供参考 1、Logrotate配置文件介绍 Linux系统默认安装logrotate,默认的配置文件: #/etc/logrotate.conf #

一个马马虎虎的程序员 1314

日志切割之:logrotate

logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。可以节省磁盘空间。 配置文件介绍 Linux系统默认安装logrotate工具,它默认的配置文件在: /etc/logrotate.conf /etc/logrotate.d/ ogrotate.conf 才是主要的配置文件,logrotate.d 是一个目录,该目录里的所有文件都会被主动的读入/etc/logrotate.conf中执行 Logrotate是基于CRON来运行的,其脚

weixin_54632015的博客 705

Linux 日志切割神器 Logrotate 原理和配置详解

对于 Linux 系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分 Nginx日志之类的 CRON 脚本,大家似乎遗忘了 Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过! logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。可以节省磁盘空间。下面就对 logrotate 日志轮转操作做一梳理记录。 1、配置文件介绍

Zzzzzz的博客 2719

关于logrotate命令的一些知识

1. 概述 logrotate旨在简化对生成大量日志文件的系统的管理。它允许自动转储,压缩,删除和邮寄日志文件。每个日志文件都可以每天,每周,每月或当它变得太大时进行处理。 通常,logrotate作为日常cron作业运行。除非该日志的标准基于日志的大小并且每天要多次运行logrotate,或者除非使用了-f或–force选项,否则它不会在一天内多次修改日志。 命令行上可以提供任意数量的配置文件。...

运维狗的备忘录 2046

logrotate测试_logrotate 日志管理

a.logrotate 简介logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。logrotate 的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天...

weixin_39667452的博客 733

Salt logrotate 模块修复深度解析:多路径 stanza 与无 include 指令配置的正确处理

本篇文章以 Salt 仓库中 `changelog/48125.fixed.md` 记录的修复为主线,深入剖析 `logrotate.set` 在两类真实场景下的失败原因与解决方案:一是配置文件中一个 stanza 将多条日志路径分行列出(如 CentOS 默认的 `/etc/logrotate.d/syslog`),二是配置文件根本没有 `include` 指令(如直接编辑 `/etc/logr

gitblog_00817的博客 161
上一篇: 服务器磁盘满排查:df 与 du 差值过大的 12 个原因与定位命令
下一篇: 1C1G 装桌面后 swap 怎么配:三种方案的实测数据与结论
Linux_cy
博客等级 码龄1年 24粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值