讲师中心 微信公众号
AI工具推荐 视频效率加速

logrotate 轮转失败的 postrotate 脚本权限与 /etc/logrotate.d 语法检查

落瑶大大_9482

落瑶大大_9482

发布时间:2026-01-30 14:38:48

|

190人浏览过

|

来源于php中文网

原创

postrotate脚本执行失败主因是权限不足、用户上下文差异及环境变量缺失;需确保脚本可执行、使用绝对路径、显式shebang,并用logrotate -d调试语法与执行流程。

logrotate 轮转失败的 postrotate 脚本权限与 /etc/logrotate.d 语法检查

postrotate 脚本执行失败:权限和用户上下文是关键

logrotate 默认以 root 身份运行,但 postrotate 脚本里的命令未必能成功执行——常见原因是脚本本身没有可执行权限,或内部调用的命令(如 systemctl reload、kill -USR1)依赖非 root 用户环境变量、socket 权限或 $PATH 不一致。

  • postrotate 脚本文件必须有 x 权限(chmod +x /path/to/script),否则 logrotate 会静默跳过执行
  • 脚本内避免依赖 shell 别名、bash 扩展语法(如 [[),应显式使用 /bin/sh 或 /bin/bash shebang,并设为 #!/bin/sh 以兼容最小环境
  • 若需操作 systemd 服务,建议用 systemctl --no-block reload service-name,避免因服务锁或 dbus session 导致阻塞;不要用 sudo —— logrotate 已是 root,加 sudo 反而可能因缺少 TARGET 环境变量失败
  • 调试时可在脚本开头追加:logger -t "logrotate-test" "postrotate running as $(id -u):$(id -g) PATH=$PATH",再查 /var/log/messages 确认实际执行上下文

/etc/logrotate.d/ 下配置语法错误难发现?用 logrotate -d 实测

logrotate 不校验 /etc/logrotate.d/ 目录下文件语法是否合法,直到真正轮转时才报错(且常被忽略)。最可靠的方式是手动触发调试模式,它会解析所有配置但不实际重命名或删除日志。

  • 运行 logrotate -d /etc/logrotate.conf:输出详细解析过程,遇到语法错误(如缺失 {、endscript 错位、未闭合引号)会明确提示行号和错误类型
  • 注意 -d 模式仍会尝试执行 prerotate/postrotate,所以调试前确保脚本内无破坏性命令(或临时注释掉)
  • 常见语法陷阱:sharedscripts 必须与 prerotate/postrotate 成对出现;create 后不能跟空格再跟权限数字(应写成 create 644 user group,而非 create 644 user group)
  • 多个配置文件间全局设置(如 weekly、rotate)不会继承,每个文件需显式声明或依赖 /etc/logrotate.conf 中的 defaults

logrotate 报 “error: error running non-shared postrotate script” 怎么定位?

这个错误只说明 postrotate 脚本退出码非 0,但 logrotate 不输出 stderr。直接执行脚本往往无法复现——因为缺少 logrotate 设置的环境变量(如 LOGROTATE_FILE、LOGROTATE_PREPARE)和当前工作目录。

python学习
python学习

Python 编程学习助手 skill,面向零基础用户。 当用户表达以下意图时触发: - 学习 Python 基础概念(变量、数据类型、循环、函数、类等) - 请求 Python 练习题或测验 - 请求审查或调试 Python 代码 - 请求 Python 项目实战指导(爬虫、数据分析、Web 开发等入门项目) - 泛化表述如"教我 Python""我想学编程""Python 怎么写""帮我学 Python" 此 skill

下载
  • 先确认脚本是否被正确加载:用 logrotate -d 输出里搜索 “running postrotate” 看是否出现在目标日志块中
  • 在脚本开头加入 set -x 并重定向输出:exec > /tmp/postrotate-debug.log 2>&1,再手动触发一次轮转(logrotate -f /etc/logrotate.d/yourconf)
  • 检查脚本中是否有路径硬编码(如 /usr/local/bin/reload-thing),而该路径不在 root 的 $PATH 中;建议全部使用绝对路径
  • 如果脚本调用了 Python 或 Perl 脚本,确认其 shebang 指向的是系统可用解释器(如 #!/usr/bin/env python3 在某些 minimal 系统中会失败,应改用 #!/usr/bin/python3)

为什么改完配置后 logrotate 还不生效?时间窗口和状态文件很关键

logrotate 是否执行某轮转,不仅取决于配置,还受上次执行时间戳和状态文件 /var/lib/logrotate.status 控制。即使配置正确,也可能因状态未更新或时间未到而跳过。

  • 查看状态文件:cat /var/lib/logrotate.status | grep your-log-pattern,确认最后轮转日期是否合理;手动修改该文件中的日期可强制下次触发(仅用于测试)
  • crond 调用的 logrotate 通常每天一次(/etc/cron.daily/logrotate),但如果你用 logrotate -f 测试,它会忽略时间条件(daily/weekly),强制执行——这点常被忽略
  • ifempty 和 notifempty 行为容易误判:前者在日志为空时也轮转,后者则跳过;生产环境建议显式写 notifempty 避免意外清空
  • 日志路径含通配符(如 /var/log/app/*.log)时,logrotate 按字典序处理每个匹配文件,但 sharedscripts 只执行一次——这点在多实例部署中极易出错

最麻烦的其实是状态文件和权限的组合问题:脚本有 x 权限、语法无错、手动执行成功,但 logrotate 就是不调用 postrotate——八成是 /var/lib/logrotate.status 时间戳异常,或者配置文件被放在了 /etc/logrotate.d/ 但没被 include 主配置读到。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1926

2025.08.19

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1009

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3100

2023.10.25

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

60

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

60

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn