Node.js 应用长期运行后,最先失控的往往不是进程本身,而是不断增长的日志文件。对 Ubuntu 服务器来说,与其依赖手动删除或临时脚本,不如直接用系统自带的 logrotate 做统一轮转:既能按天清理、压缩旧日志,也能把保留周期和新文件权限一次性定好。下面按实际操作顺序梳理一遍,并补充每个关键选项适合解决什么问题,方便你判断这套配置是否适合自己的服务。
确认是否已安装 logrotate
大多数 Ubuntu 版本已经预装 logrotate,但在给 Node.js 应用单独加规则前,最好先确认工具可用。若系统中没有安装,直接执行下面两条命令即可:
sudo apt-get update
sudo apt-get install logrotate
logrotate 是 Linux 上常见的日志轮转工具,适合处理会持续写入的应用日志。对于部署在 Ubuntu 上的 Node.js 服务,它比手写定时清理脚本更稳妥,因为轮转频率、保留数量、压缩方式和异常处理都能放进同一份配置文件中统一管理。
为 Node.js 应用创建独立配置
如果你只想管理某一个 Node.js 项目的日志,最直接的做法是在 /etc/logrotate.d/ 下创建一份独立配置。这样不会影响系统其他日志规则,后续维护也更清晰。
sudo nano /etc/logrotate.d/nodejs-app
这里文件名用的是 nodejs-app,你也可以按项目名称来命名。关键点不在文件名本身,而是要把这份规则和你的 Node.js 应用对应起来,避免以后服务器上项目变多后分不清哪份配置管哪一组日志。
写入轮转规则并理解关键参数
打开配置文件后,写入下面这段规则,并把日志路径替换成你自己的实际目录:

/path/to/your/nodejs/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
}
这段配置本身不长,但每个参数都对应一个实际运维场景:
/path/to/your/nodejs/app/logs/*.log:指定要交给logrotate管理的日志文件。这里用了通配符*.log,适合一个目录下有多个日志文件的 Node.js 应用。daily:表示每天轮转一次。如果你的日志增长较慢,也可以改成weekly或monthly。rotate 7:表示只保留最近 7 份轮转结果,更早的日志自动删除。若这里配合daily,通常就可以理解为保留最近 7 天。compress:轮转后的旧日志会用 gzip 压缩,适合日志量较大的服务,能明显减少磁盘占用。missingok:日志文件不存在时不报错,避免因为某个日志暂时没生成就让整个轮转流程中断。notifempty:当日志文件为空时不执行轮转,减少无意义的空文件归档。create 0640 root adm:轮转完成后自动创建新的日志文件,并设定权限为0640,属主为root,属组为adm。
这组参数的核心价值在于,它不仅能“删旧日志”,还同时考虑了压缩、缺失文件容错、空日志跳过,以及新日志文件权限。对线上 Node.js 服务来说,这比单纯写一个 rm 定时任务更完整,也更不容易留下权限或清理策略上的隐患。
手动强制执行一次验证配置
配置写完后,不建议直接放着不管。最稳妥的做法是先手动强制轮转一次,确认路径、权限和规则都没有写错:

sudo logrotate -f /etc/logrotate.d/nodejs-app
这里的 -f 表示强制执行,不管当前是否到了计划中的轮转时间,都会立即跑一遍。如果命令执行后没有报错,通常说明这份配置可以正常工作。
这一步的意义很实际:很多日志清理配置看起来没问题,但真正执行时才会暴露路径写错、权限不匹配或规则不生效等问题。先做一次人工验证,能避免日志在服务器上继续堆积几天后才发现配置根本没有跑起来。
配置完成后能解决什么问题
完成上述设置后,logrotate 就会按你定义的策略定期处理 Node.js 日志。以本文这份示例配置为例,系统会每天轮转一次,保留 7 份旧日志,并对历史日志进行压缩,从而降低磁盘持续被日志占满的风险。
如果你的应用日志增长速度特别快,可以再根据业务情况调整轮转频率和保留数量;如果只是常规 Web 服务,这套 daily + rotate 7 + compress 的组合已经能覆盖大多数基础清理需求。重点是先把日志管理从“靠记得手动删”变成“按规则自动执行”,这样服务器运行会稳定得多。







