游乐游手机版
首页/系统平台/文章详情

Linux中如何配置指定日志文件自动切分与轮转

时间:2026-08-17 11:49
logrotate 的配置文件必须放在 etc logrotate d 目录中,这一点不能出错。原因很明确:cron 实际只会通过 etc cron daily logrotate 调用 etc logrotate conf,而主配置文件又依赖 include etc logrotate

logrotate 的配置文件必须放在 /etc/logrotate.d/ 目录中,这一点不能出错。原因很明确:cron 实际只会通过 /etc/cron.daily/logrotate 调用 /etc/logrotate.conf,而主配置文件又依赖 include /etc/logrotate.d 来加载具体的日志轮转规则。如果把配置放到其他路径,系统默认情况下并不会自动识别。针对 Nginx 日志切割,通常需要配置 daily、dateext、dateyesterday 和 dateformat -%Y-%m-%d,同时还要在 postrotate 中使用 kill -USR1 进行安全重载,这样在日志分割完成后,Nginx 服务也能平滑接管新的日志文件。

如何在Linux中配置具体的日志文件自动切分

必须把配置文件放到 /etc/logrotate.d/ 目录下,否则 cron 默认不会执行它。

logrotate 配置文件应该放在哪里、系统如何加载

logrotate 不会在整个系统中自动搜索配置文件,它通常只读取两个固定位置:/etc/logrotate.conf(主配置文件)以及 /etc/logrotate.d/ 目录中的配置。Linux 系统每天会通过 /etc/cron.daily/logrotate 这个定时脚本执行 logrotate /etc/logrotate.conf,而主配置文件中默认又包含了 include /etc/logrotate.d。也就是说,像 Nginx、MySQL 这类服务的日志自动切分配置之所以要放在该目录下,核心原因就在这里。

常见错误:

  • 把配置写到 /root/nginx.logrotate/usr/local/etc/logrotate.d/nginx,手动执行 logrotate -f 虽然成功,但并不代表部署完成——因为 cron 实际上根本不会读取这些路径
  • 给配置文件加上 .conf 后缀(例如 nginx.conf),logrotate 通常会直接跳过这类文件
  • 文件权限不是 644、属主不是 root:root,在部分 Linux 发行版中可能会被静默忽略

如何为 Nginx 日志设置按天切割并添加日期后缀

关键并不只是添加 dateext,而是要结合 dailydateyesterday 一起使用,才能生成类似 access.log-2026-07-08 这样的日志文件名(即使用“昨天”的日期,语义更准确,也更符合运维习惯)。

示例配置(写入 /etc/logrotate.d/nginx):

/var/log/nginx/*.log {
daily
dateext
dateyesterday
dateformat -%Y-%m-%d
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
pidfile=$(nginx -t 2>&1 | grep "pid" | awk '{print $NF}')
[ -f "$pidfile" ] && kill -USR1 $(cat "$pidfile")
endscript
}

注意点:

  • dateformat 必须紧跟在 dateext 后使用,并且格式字符串前面要带短横线(-%Y-%m-%d),否则生成的日志文件名可能缺少分隔符
  • postrotate 中不建议使用 systemctl reload nginx:它可能触发 worker 进程重启,存在请求丢失风险;而 kill -USR1 属于原子方式重新打开日志句柄,可实现近乎零停机的日志切换
  • pidfile 路径不要直接硬编码——通过 nginx -t 输出中的 pid 行获取真实路径,能更好兼容不同的安装环境和部署方式

按大小切分和按时间切分有什么区别,参数怎么选

如果日志增长速度不稳定(例如白天访问量高、夜间几乎没有日志),仅使用 daily 可能会在某些时段切出空文件。这种情况下,通常更适合优先使用 size 触发轮转,例如 size +50M(注意单位必须是大写 M,小写 m 会直接报错)。

两种方式可以同时使用:

  • dailysize +50M 同时配置时,只要满足任一条件,就会触发日志轮转
  • rotate 7 控制的是归档保留数量,和 daily 并不是同一个概念——它表示“最多保留 7 个历史归档文件”,而不是“保留最近 7 天的日志”
  • 对于高频率但单文件较小的日志(例如 debug 级日志),要谨慎启用 compress:压缩消耗的 CPU 资源有时可能超过节省的磁盘空间
  • 如果服务本身不支持重载(比如某些 Ja va 应用),就需要使用 copytruncate,但要注意它是通过复制后清空原文件来实现的,在这一过程中可能会丢失少量日志内容

如何调试并验证 logrotate 配置是否生效

不要等到第二天再观察结果,建议先在本地或服务器上验证配置:

  • 语法检查:logrotate -d /etc/logrotate.d/nginx —— 只输出执行动作,不会真正运行,重点查看是否出现 “error” 或 “skipping”
  • 强制立即执行:logrotate -f /etc/logrotate.d/nginx —— 生产环境中要谨慎使用,避免与 cron 定时任务冲突,导致日志被重复切割
  • 查看上次执行记录:cat /var/lib/logrotate.status,确认对应日志路径的最后轮转时间是否正常
  • 切分完成后立即检查:ls -l /var/log/nginx/,确认新日志文件权限是否为 0640、旧日志文件名是否包含日期后缀,以及 postrotate 是否成功发送信号(可通过 ps aux | grep nginx 查看 master 进程是否仍正常运行)

最容易被忽略的一项配置是 missingok:如果 Nginx 刚安装完成、日志文件还没有生成,缺少它会导致整个 logrotate 任务中断,进而影响后续所有日志轮转配置的执行。

来源:https://www.php.cn/faq/2992550.html
上一篇远程桌面连接Mac分辨率太低怎么调整设置 下一篇Windows 10应用商店提示我们这边出了点问题怎么解决
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
VMware安装Ubuntu完整教程:创建虚拟机与启动验证
系统平台 · 2026-09-01

VMware安装Ubuntu完整教程:创建虚拟机与启动验证

本教程详细演示如何在VMware中创建Ubuntu虚拟机,涵盖ISO挂载、硬件配置、安装向导及启动验证。通过清晰的步骤与验证命令,帮助新手快速搭建可用的Linux学习环境。

Win10专业版U盘安装教程:制作启动盘与完整安装步骤
系统平台 · 2026-09-01

Win10专业版U盘安装教程:制作启动盘与完整安装步骤

本文提供Win10专业版U盘安装完整流程:准备8GB以上U盘与官方镜像,制作启动盘并核对盘符;通过F12 F11 Esc等快捷键或BIOS设置U盘为第一启动项;安装时选择专业版并谨慎分区;完成后在“设置—系统—关于”验证版本与激活状态。操作前务必备份数据。

Windows10系统字体太小怎么调大
系统平台 · 2026-08-27

Windows10系统字体太小怎么调大

Windows10系统字体太小怎么调大?只需两步:首先打开设置中的显示选项,将缩放比例调整为125%或150%;随后运行ClearType文本调谐器优化字体清晰度。此方法适用于高分屏及普通屏幕,无需修改注册表即可解决界面拥挤问题。

Win10磁盘占用100%基础排查:从监控到清理的完整步骤
系统平台 · 2026-08-27

Win10磁盘占用100%基础排查:从监控到清理的完整步骤

Windows 10系统出现磁盘占用100%会导致电脑卡顿、程序响应缓慢。本文提供基础排查方案:首先通过任务管理器确认是否为磁盘高负载,随后进入系统存储页面分析C盘占用类别,最后针对性清理临时文件。遵循此流程可有效缓解磁盘压力,避免盲目重装系统。

Windows10系统怎么显示此电脑和控制面板
系统平台 · 2026-08-27

Windows10系统怎么显示此电脑和控制面板

Windows10默认可能不显示桌面图标,导致找不到“此电脑”和“控制面板”。只需进入个性化设置,在“桌面图标设置”中勾选对应选项即可恢复。本文提供详细图文步骤,帮助快速找回系统入口。