当前位置:首页 >  站长 >  数据库 >  正文

服务器磁盘天天告警?八成是日志没轮转,logrotate 十分钟配好

 2026-08-28 11:28  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

有个经典事故:网站跑了半年突然全挂,查半天发现是磁盘满了,罪魁祸首是 access.log 涨到了 80GB。日志不管理,等于给服务器埋了个定时炸弹。Linux 自带的 logrotate 就是干这个的,大多数发行版装完就有,不用额外装任何东西。

logrotate 的思路很简单:按你定的周期把当前日志改名存档,压缩旧日志,超过保留份数就删掉,再通知 Nginx 重新打开日志文件。给 Nginx 写一份配置就够用。

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
dateext
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}

逐行解释:daily 每天轮转一次;rotate 14 保留两周;compress 压缩存档,delaycompress 让最近一份先不压、方便排查昨天的日志;dateext 存档文件带日期后缀,一眼看清新旧。最关键的是 postrotate 里那句 kill -USR1:Nginx 收到 USR1 信号会重新打开日志文件,不改这句的话,改名后的旧文件会被进程一直占着,新日志还在往改名的文件里写,轮转等于白做。

MySQL 的错误日志、PHP-FPM 的 slow.log、站点自己的业务日志,照这个模板各写一份放 /etc/logrotate.d/ 下面就行。业务日志通知方式不同(比如 PHP-FPM 用 reload),postrotate 换成对应命令。

配完先手动跑一遍验证:

# 强制轮转一次看效果
logrotate -f /etc/logrotate.d/nginx
ls -lh /var/log/nginx/
# 预期:access.log 变小,多了 access.log-20260826 之类的存档

再把检查磁盘的活交给监控,可以配一条 df -h 超过 85% 就告警的脚本。日志轮转属于一次配置常年受益的事,新服务器初始化时我建议把它写进装机清单,别等吃了亏再补。

数据来源:Nginx官方文档日志管理章节

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程
php开发工具

相关文章

热门排行

信息推荐