0

0

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

冷漠man

冷漠man

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

|

110人浏览过

|

来源于php中文网

原创

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

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

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

logrotate 默认以 root 身份运行,但 postrotate 脚本里的命令未必能成功执行——常见原因是脚本本身没有可执行权限,或内部调用的命令(如 systemctl reloadkill -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
  • 多个配置文件间全局设置(如 weeklyrotate)不会继承,每个文件需显式声明或依赖 /etc/logrotate.conf 中的 defaults

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

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

WPS AI
WPS AI

金山办公发布的AI办公应用,提供智能文档写作、阅读理解和问答、智能人机交互的能力。

下载
  • 先确认脚本是否被正确加载:用 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),强制执行——这点常被忽略
  • ifemptynotifempty 行为容易误判:前者在日志为空时也轮转,后者则跳过;生产环境建议显式写 notifempty 避免意外清空
  • 日志路径含通配符(如 /var/log/app/*.log)时,logrotate 按字典序处理每个匹配文件,但 sharedscripts 只执行一次——这点在多实例部署中极易出错

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

316

2023.10.17

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

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

752

2023.10.18

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

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

93

2025.08.19

scripterror怎么解决
scripterror怎么解决

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

228

2023.10.18

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

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

297

2023.10.25

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号