凌晨两点十七分,我正窝在沙发里刷手机,突然一阵密集的“叮咚”声差点把手机震掉——七台服务器的监控全红了,网站全部502,数据库连接失败,连宝塔面板自己都打不开。
那一瞬间,我后背的汗比咖啡因还提神。
宝塔面板运行日志,别让看不见的日志坑了你一整夜
第一反应:重启,但更糟糕的是,面板登录页面都转圈圈,SSH连上去敲bt命令,系统也卡得要死,这不像普通的宕机,更像是资源被吃干抹净了。
第一步:先看“跑日志”的进程
我强撑着困意,输入top -c,CPU显示100%被一个叫python3的进程霸占,但更蹊跷的是,内存直接爆表,swap也被吃光,直觉告诉我,这大概率是宝塔的任务队列或日志写入线程卡死了。
第二步:翻宝塔运行日志,别瞎猜
很多新手遇到这种问题,直接去/www/server/panel/logs翻error.log,结果啥也看不出来,我习惯先看面板自身的运行日志——/www/server/panel/logs/request.log和task.log。
打开task.log的瞬间,我愣住了:从晚上十点开始,每隔两分钟就有一条“执行日志切割任务”的记录,但每次都卡在“正在写入文件头部”,也就是说,宝塔的日志轮转(按天切分日志)脚本陷入了死循环,疯狂占用资源,把磁盘I/O和内存全拖垮了。
真实踩坑根源:一个“超大日志文件”
顺着线索排查,我找到了罪魁祸首:/www/wwwlogs/某站点-access.log的文件大小竟然有23GB,正常情况,宝塔每天凌晨会自动切割,但那天这个站点的访问量异常飙升(后来发现是被人刷了CC攻击),日志文件瞬间膨胀,切割脚本在写入新文件头部时反复读取旧文件尾部,导致死锁。
报错截图描述(我当时拍的):
截图里,
task.log满屏是:[2025-03-18 01:45:02] INFO: 开始切割日志: /www/wwwlogs/xxx.log[2025-03-18 01:45:03] ERROR: open(/www/wwwlogs/xxx.log): No space left on device(实际上是假的“磁盘满”,因为inode被单个大文件占用,实际磁盘没满,但系统误判) 这条日志循环重试,每次间隔不到3秒。
当时的排查思路(很重要):
- 别急着删日志——删了之后宝塔进程还在拿着文件句柄,不会释放空间,必须
kill掉卡死的python进程。 - 用
lsof | grep deleted找被删但未释放的文件句柄,其实我没删,但发现宝塔后台有一堆“僵尸”日志切割子进程,占着句柄。 - 清理核心,再修复队列。
解决方案(一步不落):
- 强制杀掉卡死的面板进程:
kill -9 $(pgrep -f "panel/task.py" | head -5),然后service bt stop && service bt start,注意,别用service bt restart,有时会残留进程。 - 手动切割超大日志:用
ls -lh /www/wwwlogs/找到那个23GB的文件,然后执行:mv 站点-access.log 站点-access.log.$(date +%Y%m%d),再touch 站点-access.log,并chown www:www。 这一步相当于手动替代宝塔的切割,目的是让旧文件彻底脱离当前句柄。 - 修改宝塔的日志切割配置:在
/www/server/panel/config/task.json里,找到日志轮转任务,把timeout从默认的30秒改成300秒,并加上max_size: 5G,这样单文件超过5G自动跳过,不硬切。 - 清理残留的临时文件:
find /www/server/panel/logs -name "*.tmp" -mtime +1 -delete。
预防建议(血泪教训):
- 别用默认的日志切割策略,宝塔默认按天切,但遇到攻击或高流量,一天就能爆出几十G,去“软件商店”装个“日志清理插件”,设置最大日志大小500M,超了就强制轮转并压缩。
- 定期监控inode使用率。
df -i如果超过90%,很多操作会报“磁盘满”,但实际空间还有,我那次就是inode被一堆小碎片占满(比如/tmp下的秒杀临时文件)。 - 给宝塔面板本身改个端口并限流,我就因为没改,被人扫描到默认8888端口,发起了大量的POST请求,间接导致日志暴涨。
- 每天晚上固定时间看一眼
task.log的大小,如果发现它超过了5M,基本就有任务在反复重试了,提前干预。
最后说句实在话,宝塔面板是个好工具,但它的运行日志有时候比业务日志更值得看,那次事故后,我写了条定时任务:每天早上7点检查/www/server/panel/logs/task.log,如果文件大于10M,就自动grep“ERROR”并发送到我的微信机器人。
折腾到凌晨四点半,网站全恢复了,望着屏幕上重新变绿的监控,我叼着烟想:运维这活儿,不是看技术多花哨,而是看你能不能从一行日志里读出它背后那半部“血泪史”,下次再遇到面板卡死,别急着重装系统,先扒开日志,它不会撒谎——只会拐弯抹角地告诉你,你该管管那个疯长的日志文件了。



发表评论