pm2-logrotate配置不生效致日志达1.7G,如何解决日志占用问题?
解决pm2-logrotate未按配置切割日志、占用大量资源的问题
我来帮你一步步排查并修复这个问题,从你的配置来看,核心问题出在rotateInterval的Cron表达式配置错误,再结合几个关键操作就能解决日志膨胀的问题:
1. 修正错误的Cron表达式
你当前的rotateInterval配置是* * */1 * * *,这个表达式的含义是每分钟都触发一次日志检查,这会打乱pm2-logrotate按大小切割的逻辑,甚至导致切割机制失效。
根据你的需求(按大小切割+自动删除旧日志),建议把rotateInterval调整为每天凌晨0点触发一次定时检查,同时保留按大小切割的兜底逻辑:
pm2 set pm2-logrotate:rotateInterval "0 0 * * *"
如果只想完全依赖max_size触发切割,可以把rotateInterval设为空字符串,但定时检查能作为更可靠的兜底机制。
2. 确保核心配置生效并重启日志模块
重新确认你的关键配置,强制刷新并重启pm2-logrotate:
# 确认日志最大大小为10M pm2 set pm2-logrotate:max_size 10M # 只保留1份旧日志(超过的自动删除) pm2 set pm2-logrotate:retain 1 # 重启日志管理模块,让配置生效 pm2 restart pm2-logrotate
3. 手动清理现有超大日志
当前已经存在1.7G的日志,先手动清理避免占用资源:
# 清空所有pm2应用的日志(会生成新的空日志文件) pm2 flush # 或者手动删除指定应用的旧日志(默认路径是~/.pm2/logs/) rm ~/.pm2/logs/<你的应用名称>-out.log ~/.pm2/logs/<你的应用名称>-error.log # 重启应用生成新日志 pm2 restart <你的应用名称>
4. 验证配置是否正常工作
执行以下命令检查最终配置:
pm2 conf pm2-logrotate
之后可以做个小测试:手动往日志文件写入大量内容(比如用dd if=/dev/zero of=~/.pm2/logs/<你的应用名称>-out.log bs=1M count=11),等待30秒(你的workerInterval配置),看是否自动切割日志并只保留1份压缩后的旧日志。
额外注意点
workerInterval设为30秒是合理的,这是pm2-logrotate检查日志大小的间隔,无需调整;compress: true会自动压缩旧日志,进一步节省磁盘空间;- 如果后续仍出现问题,可以尝试更新pm2和pm2-logrotate到最新版本:
npm update -g pm2 pm2-logrotate
内容的提问来源于stack exchange,提问作者Cátia Matos




