场景引入:
“卧槽,网站又打不开了!”凌晨两点,你正睡得香,手机突然疯狂震动,打开后台一看,磁盘满了,红得刺眼,你哆嗦着手点开宝塔的“文件”菜单,想找找哪个大文件在作妖——结果,一眼就看到了那个叫 wwwlogs 的文件夹,好家伙,一个日志文件2GB,另一个3GB,还在以肉眼可见的速度狂涨。
各位老铁,是不是你?是不是你!别慌,今天咱们不换服务器,不删数据,就干一件事:给宝塔日志戴上“紧箍咒”,让它该滚滚,该切切,全文干货,跟着我一步步点,保证你五分钟学完,今晚睡个安稳觉。
宝塔日志爆盘危机!3步配置轮转+切割,日志再多也不怕
第一步:找到那个“吞金兽”
我们先打开宝塔面板,左侧菜单栏找到【文件】,看到那一排排的目录了吗?别乱翻,直接在上方路径栏输入 /www/wwwlogs 然后回车。
画面切换提示: 如果看到文件夹里有类似 你的域名.log 或者 站点名.log 的文件,那恭喜你,罪魁祸首就是它。关键配置特写: 注意看这个文件的“修改时间”,如果它每秒都在刷新,说明访问量极高或者被采集了。
这里敲黑板:千万不要直接右键删除这个log文件! 因为你服务器的Nginx或Apache进程还握着这个文件句柄呢,你删了它,系统不会释放空间,而且会继续往“已删除但仍在写入”的死角里写数据,最后你连删除都删不掉,必须重启Web服务才行,咱们要用“正规军”方案,往下看。
第二步:Python脚本实操,切出“豆腐块”
我们需要一个脚本来自动分割日志,别怕,不用你自己写代码,宝塔自带的就有,只是需要“抄作业”。
画面切换提示: 看到左侧【软件商店】了吗?点进去,搜索“宝塔日志切割工具”,或者如果你没装,直接看我操作:
- 打开【终端】(或者用Xshell连接服务器)。
- 复制下面这串命令(字体加粗部分),回车:
wget -O /www/server/panel/script/logrotate.sh https://download.bt.cn/install/script/logrotate.sh && chmod +x /www/server/panel/script/logrotate.sh && bash /www/server/panel/script/logrotate.sh
关键配置特写: 脚本跑完后,它会问你“请输入日志保存天数”,这里我建议填 7,不是越小越好——留3天太短,下次想排查攻击记录都没了;留15天又占地方,7天刚刚好,既能覆盖一周的流量周期,又可以及时清理。
跑完脚本,你回 /www/wwwlogs 目录看看,是不是多了一个 .tar.gz 结尾的压缩包?那昨天的日志已经被打包了,今天的日志还是原样,但别急,这只是“手动摸个底”,接下来才是重头戏。
第三步:根治“狂飙”,配置轮转策略
如果你嫌上面的脚本每天手动跑太麻烦(其实可以定时任务,但今天讲更狠的),咱们直接改Nginx配置,让它按大小自动切。
画面切换提示: 找到左侧【网站】,点击你那个爆盘的站点名称,选择【配置文件】。关键配置特写: 在 server { } 块里面,找到类似这样两行:
access_log /www/wwwlogs/你的域名.log; error_log /www/wwwlogs/你的域名.error.log;
把它们替换成下面这段(加粗部分):
access_log /www/wwwlogs/你的域名.log main buffer=32k flush=5s;
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
access_log /www/wwwlogs/你的域名-$year-$month-$day.log main buffer=32k flush=5s;
老铁注意了! 这不是让你复制两份日志!上面的 if 块是让日志文件名自动带上日期,但是别慌,真正实现“按大小切割”的是下面这招:
在 server 块外面,或者 /www/server/nginx/conf/nginx.conf 的主配置里,加一句(新手直接在网站配置文件的server外最后一层括号前加):
map $time_iso8601 $logdate {
default '';
~^(?<ymd>\d{4}-\d{2}-\d{2}) $ymd;
}
然后再把日志路径改成:access_log /www/wwwlogs/你的域名-$logdate.log main;
常见错误提醒: 这里最容易踩坑!如果你只改了access_log路径,但没加 map 变量,重启Nginx会直接报错 unknown log format "main",或者日志不生成,改完配置后,一定要点右上角【保存】,然后去【服务】里点击【重载配置】或者【重启】,千万别只保存不重启! 否则配置不生效,你刚才的复制粘贴等于白搞。
最后一步:设置定时炸弹(自毁程序)
现在的日志是每天一个文件了,但文件还是会膨胀,我们需要一个“自动清理队长”——宝塔计划任务。
画面切换提示: 左侧菜单【计划任务】->【添加任务】->【Shell脚本】。
任务名称填“清理7天前日志”,执行周期选“每天” ,时间选 03:00(这个时候访问量低,不耽误事)。
框里,输入:
find /www/wwwlogs/ -name "*.log" -mtime +7 -exec rm -f {} \;
find /www/wwwlogs/ -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
echo "日志清理完成,剩余空间如下:"
df -h | grep /www
然后点【添加任务】。
画面切换提示: 你现在可以去点击那个脚本的【执行】按钮,手动测一下,看着终端窗口里滚出 日志清理完成 的字样,再看看磁盘占用,是不是瞬间清爽了?
常见错误提醒 & 心态安抚:
老铁们,最后啰嗦一句,如果你发现改完配置后,日志还是只涨不切,99%的原因是权限问题,你执行 chown -R www:www /www/wwwlogs/ 把日志目录的属主改成 www(宝塔Web服务用户),再重启一次Nginx。
有的兄弟说:这太复杂了,我就想让它别爆盘,那我给你个终极懒人招:直接清空日志,但记住,清空不是删除!用这个命令:
> /www/wwwlogs/你的域名.log
注意那个 > 尖括号,它叫“清空不释放文件句柄”,这就避免了刚才说的“删了但空间不释放”的坑,但这是权宜之计,明天还是会长。
好了,按照上面的步骤走一遍,今晚凌晨三点,你的手机肯定不会响,日志这玩意儿,你不管它,它就废你服务器;你管它,它就是你的流量侦探,去试试吧,有问题评论区甩截图,我盯着呢!



发表评论