每日智识
柔彩主题三 · 更轻盈的阅读体验

日志轮转手动执行命令的实用操作指南

发布时间:2025-12-15 15:29:58 阅读:3 次

服务器运行久了,日志文件动不动就涨到几个GB,查看起来卡顿不说,还容易占满磁盘。这时候,日志轮转(log rotation)就成了运维中的家常便饭。虽然大多数系统都配置了自动轮转,但有时候就是得手动干预一下——比如刚改完配置想测试效果,或者某个服务日志突然暴涨,等不及定时任务。

为什么要手动执行日志轮转?

举个例子:你负责的Web服务今天报错频繁,error.log 两小时就写满了2G。你调整了日志级别,想验证是否生效,但不确定轮转机制能不能正确切割旧文件。这时候,与其干等cron半夜执行,不如直接手动触发一次,立马看到结果。

常见的日志轮转工具:logrotate

Linux系统中,logrotate 是最常用的日志管理工具。它通过配置文件定义轮转规则,比如按大小、按时间、保留份数等。手动执行的核心命令是:

sudo logrotate -f /etc/logrotate.d/your-app

其中 -f 表示强制执行,不管是否满足条件。比如你有一个Nginx的日志配置在 /etc/logrotate.d/nginx,可以直接这样运行:

sudo logrotate -f /etc/logrotate.d/nginx

执行后,当前的日志文件会被重命名(如 access.log 变成 access.log.1),并创建新的空文件继续写入。如果配置了 compress,还会自动打包成 .gz 文件。

调试配置是否正确

在正式执行前,可以先用 -d 参数做一次模拟,看看logrotate打算做什么:

sudo logrotate -d /etc/logrotate.d/nginx

这个命令不会真正修改文件,但会输出详细的操作流程,适合用来排查配置错误,比如路径写错、权限不足等问题。

配合服务重启避免丢失日志

有些服务在日志文件被移动后,仍然往原文件描述符写数据,导致新文件没内容,旧文件还在悄悄增长。解决办法是在轮转后发送 HUP 信号或重启服务。logrotate 配置里通常会包含 postrotate 脚本:

postrotate
    systemctl reload nginx > /dev/null 2>&1 || true
endscript

手动执行时,这部分也会照常运行,确保服务能切换到新日志文件。

小技巧:快速清理特定日志

如果你只是想清空某个日志文件而不删除它(比如保持进程句柄不中断),可以用:

sudo truncate -s 0 /var/log/nginx/access.log

这比直接删除更安全,尤其适用于正在高频写入的日志。不过这不是轮转,只是清空,注意别误用。

掌握手动执行日志轮转的命令,就像是给系统维护多配了一把应急钥匙。下次面对暴增的日志,不用再盯着文件大小干着急,一条命令就能搞定。