当前位置:首页 > 文章列表 > 文章 > linux > Linux logrotate配合postrotate通知服务重开日志的配置

Linux logrotate配合postrotate通知服务重开日志的配置

来源:17golang原创 2026-09-20 12:25:18 0浏览 收藏

我在排查“日志文件已经被改名,服务却还在往旧文件写”的问题时,最后把责任拆成两段:logrotate 负责完成轮转,服务负责重新打开同名的新文件。配置的关键不是简单加一条重启命令,而是让 postrotate 只在真的发生轮转后发出服务能理解的重开信号。

官方地址:https://github.com/logrotate/logrotate/

要点速览
  • sharedscripts 把通配路径匹配到的多份日志合并成一次通知。
  • postrotate 不是无条件执行;没有文件需要轮转时不会运行。
  • 先用调试模式看判断结果,再用强制运行和文件增长确认服务已经切到新文件。

先把轮转和重开职责分开

常见场景是服务持续打开 /var/log/myapp/app.log。logrotate 把它改名为 app.log.1,再创建新的 app.log;但进程手里的文件描述符仍然指向旧 inode。此时目录里虽然出现了新文件,服务并不会自动切换。

因此重开动作必须由服务提供支持。优先确认单元的文档或启动脚本是否约定了 HUPreload 或专用管理命令。不要把“重启服务”当成通用替代品:它会带来连接中断,且未必比重新打开日志更安全。

Linux logrotate轮转旧日志并通过postrotate向服务发送重开信号的结构说明图
图1:结构说明图,logrotate 只负责生成新日志文件,postrotate 再把重开信号交给服务。

用 sharedscripts 控制 postrotate 的触发次数

一个配置可能匹配 app.logaccess.logerror.log。默认情况下,脚本可能按每个实际轮转的文件触发;服务却通常只需要一次重开。把 sharedscripts 放在脚本块前,可以让这一组匹配文件共用一次 postrotate,减少重复信号。

/var/log/myapp/*.log {
    daily
    rotate 14
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        # 仅在本组至少有一份日志完成轮转后,通知主进程重开日志
        systemctl kill -s HUP --kill-who=main myapp.service
    endscript
}

这里的 delaycompress 让刚轮转的上一份日志暂不立即压缩,便于某些仍需短暂读取旧文件的流程;它不是重开信号的替代品。若服务不识别 HUP,应把命令换成该服务明确支持的 reload 方式。

用调试模式确认 logrotate 真的会执行脚本

“postrotate 没反应”经常不是脚本坏了,而是当前轮转周期、文件大小或 notifempty 条件没有满足。先只做判断,不改文件:

# -d 只展示解析与轮转判断,不实际改名、压缩或发送信号
sudo logrotate -d /etc/logrotate.d/myapp

# 需要一次演练时再强制执行;执行前确认测试路径和服务名称
sudo logrotate -f /etc/logrotate.d/myapp

调试输出应能看到配置被读取、目标日志的轮转判断,以及是否跳过脚本。强制运行会改变日志文件,最好在维护窗口使用,并先保留当前配置副本。

logrotate调试结果与postrotate服务重开信号之间的排查关系说明图
图2:排查说明图,把“没有轮转”“脚本失败”和“服务仍写旧文件”分成三个不同证据层。

三类现象对应三种修复动作

现象先看什么处理方向
没有看到 postrotate 输出调试输出、周期、文件大小、notifempty先确认是否真的发生轮转,不要先改信号命令
出现 shared postrotate script errorsystemctl 状态、单元名、信号权限修正服务单元或改用支持的 reload 命令
新文件不增长,旧文件继续变大文件 inode、服务日志、重开后状态确认服务能重开日志,并在新文件产生写入后再收尾

如果服务使用独立用户运行,systemctl kill 往往比直接读取 PID 文件更不容易拿错进程;若只能使用 PID 文件,脚本必须检查文件非空、进程存在和退出码,避免把陈旧 PID 发给其他进程。

上线前留下可回滚的检查清单

  • 配置文件能被 logrotate -d 正常解析,花括号和 endscript 成对。
  • 服务单元名称、运行用户和重开信号已经与实际部署一致。
  • 强制演练后,旧日志被保留,新日志文件出现,且服务日志没有报告 reload 失败。
  • 观察一个自然周期,确认新文件持续增长;异常时先移除或恢复该配置,再检查服务自身日志。

常见问题

postrotate 会在每次定时任务都执行吗?

不会。目标文件没有满足轮转条件时,脚本不会执行;满足条件时才会在轮转后运行。

sharedscripts 是不是必须配置?

不是。只有一个日志文件时通常无须它;通配符匹配多文件并且服务只需一次重开时,它能避免重复通知。

发 HUP 后仍然写旧日志怎么办?

先确认服务是否把 HUP 定义为重开日志,再检查信号是否发给正确的主进程。若服务不支持 HUP,应改用官方约定的 reload 入口。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go regexp命名分组提取日志字段的维护方式Go regexp命名分组提取日志字段的维护方式
上一篇
Go regexp命名分组提取日志字段的维护方式
Go io.ReadAll处理无界响应时的内存保护方案
下一篇
Go io.ReadAll处理无界响应时的内存保护方案
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    135次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    200次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    146次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    125次使用
  • CMMLU中文大模型评估基准:功能、使用教程与应用场景解析
    CMMLU
    深入了解CMMLU中文评估基准,涵盖67个学科主题,提供数据集下载、Zero-shot/Five-shot评估方法及排行榜,助力优化中文语言模型性能。
    111次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码