登录
首页 >  文章 >  php教程

宝塔面板日志文件过大_配置日志轮转与定时清理

时间:2026-05-24 12:43:18 364浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《宝塔面板日志文件过大_配置日志轮转与定时清理》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

宝塔面板日志轮转需依赖系统logrotate,非面板内置;须手动配置/etc/logrotate.d/规则并确保权限、路径正确,启用logrotate.timer,且MySQL慢日志等需配合USR1信号重载。

宝塔面板日志文件过大_配置日志轮转与定时清理

宝塔面板日志轮转没生效?检查 logrotate 配置路径和权限

宝塔本身不内置 logrotate,它依赖系统级的 /etc/logrotate.d/ 规则。很多人以为在面板里点“日志切割”就万事大吉,结果发现 /var/log/journal/www/wwwlogs/xxx.log 依然疯长——问题常出在 logrotate 没被正确触发,或配置文件压根没写对路径。

  • 先确认 logrotate 是否真在运行:sudo systemctl status logrotate.timer,若显示 inactive,需启用:sudo systemctl enable --now logrotate.timer
  • 检查宝塔站点日志是否被纳入轮转:默认不会自动加入,得手动创建配置,比如 /etc/logrotate.d/bt-site,内容必须严格匹配日志实际路径,例如:
    /www/wwwlogs/*.log {
        daily
        rotate 10
        compress
        missingok
        notifempty
        create 640 www www
    }
  • create 640 www www 这行不能少,否则轮转后新日志因权限不对写不进去,Nginx/Apache 会报错 open() "/www/wwwlogs/xxx.log" failed (13: Permission denied)
  • 测试配置是否语法合法:sudo logrotate -d /etc/logrotate.d/bt-site-d 是 debug 模式,不真正执行)

宝塔计划任务里的“日志切割”功能到底切什么?

这个功能只处理宝塔面板识别为“网站日志”的文件,即 /www/wwwlogs/域名.log/www/wwwlogs/域名.error.log,且仅支持按天切割、保留份数,**不处理 Nginx 自身的 access.logerror.log(如果它们被重定向到别处),也不管 /var/log/ 下任何系统日志。

  • 它本质是调用宝塔内部脚本执行 mv + gzip + touch,不是 logrotate,所以无法限制单个文件大小,也不能压缩旧日志时延迟删除原始文件(delaycompress
  • 如果你在站点设置里关了“记录访问日志”,那这个切割任务就完全无效——它切的是“已开启日志记录”的站点
  • 执行时间固定在每天 00:30,不可修改;若服务器在那个时刻离线,当天切割就会跳过,不会补执行
  • 建议只对高流量正式站启用,测试站直接关日志更省事:记录访问日志记录错误日志 全部取消勾选

systemd-journald 占几 GB?journalctl 的配额必须手动设

宝塔面板服务(bt)、MySQL、Nginx 等只要用 systemd 启动,其 stdout/stderr 默认全被 journald 捕获。默认无上限,/var/log/journal/ 几个月就能涨到 5–10 GB,而宝塔面板的“日志清理工具”对此完全无感。

  • 查当前占用:journalctl --disk-usage,常见输出如 Archived and active journals take up 6.2G in the file system.
  • 永久限制大小(推荐 500M):sudo mkdir -p /etc/systemd/journald.conf.d,然后写入 /etc/systemd/journald.conf.d/limit.conf
    [Journal]
    SystemMaxUse=500M
    RuntimeMaxUse=500M
  • 生效需重启 journald:sudo systemctl restart systemd-journald,再执行 sudo journalctl --vacuum-size=500M 立即清理超限部分
  • 注意:vacuum-size 是一次性操作,SystemMaxUse 才是长期生效的硬限制;不设的话,journald 会按磁盘总容量的 10% 自动分配,服务器磁盘大,它就敢占更多

MySQL 慢查询日志爆满?别只删文件,要关开关或设轮转

慢查询日志(slow_query_log_file)一旦开启,MySQL 就持续追加写入,文件只增不减。单纯 rm -f 删除后,MySQL 可能因文件句柄未释放继续往已删文件写(表现为磁盘空间不释放),或者重启后新建空文件但权限不对导致服务起不来。

  • 最稳妥做法:进宝塔【数据库】→【MySQL 管理】→【配置修改】,把 slow_query_log 设为 OFF,再点【重载配置】,等服务应用后,再手动删日志文件
  • 若必须保留慢日志,优先用 logrotate 而非 MySQL 内置轮转(log_rotation = ON 仅 MySQL 8.0.14+ 支持,且宝塔界面不暴露该参数)
  • logrotate 配置示例(/etc/logrotate.d/mysql-slow):
    /www/server/data/mysql-slow.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 640 mysql mysql
        sharedscripts
        postrotate
            /bin/kill -USR1 `cat /www/server/data/mysql.pid 2>/dev/null` 2>/dev/null || true
        endscript
    }
    其中 postrotate 发送 USR1 信号通知 MySQL 重新打开日志文件,避免句柄残留

日志清理最易被忽略的点:不是“怎么删”,而是“删完谁来写新日志、用什么权限写、写到哪儿”。路径写错、权限没设、信号没发,都会导致服务静默失败或日志重新开始疯长。动手前,先 ls -l 看一眼目标文件属主和权限,比盲目执行命令安全得多。

好了,本文到此结束,带大家了解了《宝塔面板日志文件过大_配置日志轮转与定时清理》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>