跳到主内容

logrotate VPS 日志轮转教程:压缩、权限、验证与回滚

在 Linux VPS 上配置 logrotate,覆盖轮转周期、大小阈值、压缩、create 与 copytruncate、postrotate、安全权限和调试验证。

GSProber · 主机测评编辑0 阅读
在 Linux VPS 上配置 logrotate,覆盖轮转周期、大小阈值、压缩、create 与 copytrunc…

logrotate VPS 日志轮转教程:压缩、权限、验证与回滚

这篇 logrotate VPS 日志轮转教程用于防止应用文本日志无限增长。logrotate 可以按时间或大小轮转、压缩和删除旧文件,但错误的通配符、权限或 postrotate 脚本也可能损坏日志和服务。上线前必须用 debug 模式验证。

开始前可参考systemd 服务自动重启教程Docker Compose 数据备份,确认服务如何重新打开日志以及配置如何回滚。

识别日志写入方式

先确认应用写入普通文件、syslog 还是 systemd journal。journald 自己管理二进制日志文件,不应直接用普通通配规则处理。对文本日志,要确认进程能否在收到 HUP 后重新打开文件。

检查 /etc/logrotate.conf/etc/logrotate.d/ 和 systemd 的 logrotate.timer。默认调度常为每日一次,因此即使规则写 hourly,没有更频繁的 timer 也不会真的每小时运行。

创建最小规则

为单个应用创建独立文件,使用准确路径,避免 * 同时匹配已经轮转的文件。选择 daily、weekly 或 size,并配置 rotate 数量、compress、delaycompress 与 missingok。

create 会在轮转后建立新文件,应明确 mode、user 和 group。目录由非特权用户控制时,root 运行的 logrotate 应使用 su 指令,降低不安全目录带来的权限问题。

create 与 copytruncate

能够重新打开日志的服务应优先使用 rename 加 create,再在 postrotate 中安全发送 reload 或 HUP。这样轮转边界清晰。sharedscripts 可让多个匹配文件只执行一次脚本。

copytruncate 适用于无法重新打开文件的旧应用,但复制和截断之间存在小窗口,少量日志可能丢失。不能为了省去服务重载就默认使用它。

调试与强制轮转

先执行 logrotate --debug 配置文件。debug 不会修改日志和状态文件,可查看匹配、条件和计划动作。确认无误后用 --verbose 观察真实运行。

--force 会忽略正常时间条件,应只在受控测试中使用。测试前保留当前日志副本,并检查磁盘空间,防止压缩或复制大文件耗尽空间。

postrotate 安全边界

postrotate 以高权限执行时,不要拼接来自文件名或环境的未验证输入。使用明确的 systemctl kill -s HUP 服务名 或受支持 reload 命令,并确保脚本失败能产生非零状态和告警。

轮转后检查服务仍运行、新文件属主与权限正确、应用继续写入、压缩文件可读取。不要只看旧文件出现就认为成功。

状态文件与并发

logrotate 使用状态文件记录上次轮转时间,并对其加锁。不要让多个定时任务使用同一状态文件同时运行;如果需要隔离测试,指定单独的 state file。

查看 systemd timer 和服务日志,确认计划任务实际触发。任何错误都会让 logrotate 以非零状态退出,但状态文件仍可能更新,因此告警必须读取退出码和日志。

保留与容量规划

根据故障调查、合规和磁盘预算设置保留数量。压缩可以节省空间,但最新轮转文件若仍被进程占用,delaycompress 往往更安全。将需要长期保存的日志发送到独立存储,不要无限增加本机 rotate。

回滚与最终验证

回滚时恢复原配置,手动让应用重新打开正确日志,并确认没有进程继续写入已改名文件。用 lsof、文件大小变化和服务日志检查写入目标。

可靠的 logrotate 配置应包含准确路径、明确权限、安全重载、debug 验证、退出码告警和容量预算。它管理的是文件生命周期,不能替代集中日志与备份。

所属专题:建站VPS专题
教程GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebR…

Cloudflare Workers 免费搭建开源远程桌面完整教程:无需 VPS,支持 WebRTC P2P、D1、KV、R2、浏览器远程控制、Windows 客户端和文件传输

GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebRTC P2P 直连,服务端仅负责 API、身份认证和 WebSocket 信令,不中转桌面视频流,大幅降低服务器带宽成本。项目支持 Cloudflare 免费套餐 部署,也可以使用 Docker 在 VPS 上自托管,内置 Windows 客户端、浏览器控制端、手机远程控制,支持 8 位设备 ID、OTP 一次性密码、永久密码、Ed25519 设备认证、JWT 身份验证、文件传输、剪贴板同步、自动重连 等完整功能。

310 阅读

教程如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare…

CloudDisk:基于 Cloudflare Workers 的免费个人网盘,无需 VPS、MySQL,支持 R2+D1+KV 一键部署

如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare Workers 的开源项目 CloudDisk 值得看看。整个系统运行在 Cloudflare 免费套餐上,文件存储使用 R2,数据库使用 D1,会话数据使用 KV,不需要 MySQL,也不需要服务器。支持多用户登录、文件夹管理、分享链接、在线预览、Office 文档查看、文本在线编辑、大文件断点续传、协作者权限管理等功能。无论是个人备份、开发者存放代码文件、团队共享资料,还是搭建自己的私有网盘,都可以直接部署到 Cloudflare,一键完成,几乎零维护成本,非常适合独立开发者、个人站长和轻量团队使用。

289 阅读

教程很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安…

Linux 开启 DNS over HTTPS(DoH)教程:使用 Cloudflared + systemd 实现加密 DNS,防污染、防劫持

很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安装 Cloudflare 官方的 cloudflared,并配合 systemd 自启动,就能让整个系统通过 DNS over HTTPS(DoH)进行加密解析。

239 阅读

常见问题

logrotate 配置 hourly 就会每小时执行吗?

不一定。调度器也必须每小时触发;默认 timer 或 cron 常常只每日运行。

什么时候应该使用 copytruncate?

仅在应用无法重新打开日志时考虑,并接受复制与截断窗口可能丢失少量日志的风险。

如何安全测试规则而不修改日志?

使用 logrotate --debug 配置文件,它会展示计划动作而不改日志和状态文件。

轮转后为什么应用不再写新日志?

进程可能仍持有旧文件描述符,需配置受支持的 reload 或 HUP,并检查新文件权限。

评价与回复

无需登录;审核通过后公开显示。