Ubuntu PHP日志满怎么办
导读:Ubuntu PHP日志满的排查与处置 一、先定位日志来源 查看 php.ini 中的 error_log 指令,确认 PHP 错误日志路径(如:/var/log/php_errors.log)。 检查 Web 服务器配置: Apach...
Ubuntu PHP日志满的排查与处置
一、先定位日志来源
- 查看 php.ini 中的 error_log 指令,确认 PHP 错误日志路径(如:/var/log/php_errors.log)。
- 检查 Web 服务器配置:
- Apache:查看 httpd.conf 或 /etc/apache2/apache2.conf 中的 ErrorLog、CustomLog。
- Nginx:查看 /etc/nginx/nginx.conf 中的 access_log、error_log。
- 搜索应用目录中的自定义日志:
- 命令:
find . -name "*.log" | grep -i php
- 命令:
- 常见目录参考:
- Apache:/var/log/apache2/
- Nginx:/var/log/nginx/
- PHP-FPM:/var/log/php-fpm/(具体以实际安装为准)
以上步骤可快速明确是 PHP 引擎日志、Web 服务器访问/错误日志还是应用框架日志在快速增长。
二、立即止损与清理
- 安全清空大文件(优先):
- 命令:
sudo truncate -s 0 /path/to/large.log(清空内容但保留文件句柄与 inode,服务无需重启)。
- 命令:
- 如必须重建文件:
- 先备份:
sudo cp /path/to/file.log /path/to/file.log.bak-$(date +%F) - 清空或删除后重建:
sudo truncate -s 0 /path/to/file.log或sudo rm -f /path/to/file.log & & sudo touch /path/to/file.log - 注意:删除后需确保进程重新打开日志文件(如 PHP-FPM 发送 USR2 信号,见下文轮转配置)。
- 先备份:
- 谨慎操作:避免直接
rm -rf或随意删除正在写入的日志,可能造成句柄异常或短暂中断。
以上做法可快速释放空间,同时尽量不影响正在运行的服务。
三、根治 配置日志轮转 Logrotate
- 为 PHP 错误日志创建配置(示例):
- 新建:
sudo nano /etc/logrotate.d/php - 内容:
/var/log/php_errors.log { daily missingok rotate 7 compress delaycompress notifempty create 640 root adm }
- 新建:
- 为 PHP-FPM 日志创建配置(示例):
- 新建:
sudo nano /etc/logrotate.d/php-fpm - 内容(按实际版本与路径调整,如 php7.4-fpm、php8.1-fpm):
/var/log/php-fpm/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate if [ -f /run/php/php7.4-fpm.pid ]; then kill -USR2 $(cat /run/php/php7.4-fpm.pid) fi endscript }
- 新建:
- 测试与生效:
- 干跑:
sudo logrotate -d /etc/logrotate.d/php-fpm(检查语法与执行计划) - 强制轮转:
sudo logrotate -f /etc/logrotate.d/php-fpm
- 干跑:
- 说明:
- daily/rotate 7/compress/delaycompress/notifempty/create 等参数可控制频率、保留份数与压缩策略。
- postrotate + kill -USR2 用于通知 PHP-FPM 重新打开日志文件,避免继续写入旧文件句柄。
以上配置可防止单日志无限增长,并按需保留历史与压缩归档。
四、减少日志产生的源头
- 调整 PHP 错误报告级别:
- 在 php.ini 中设置:
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATEDerror_log = /var/log/php_errors.log
- 修改后重启 Web 服务器或 PHP-FPM 生效。
- 在 php.ini 中设置:
- 调整 应用框架日志级别:
- 例如 Laravel:在 config/logging.php 将通道级别从 debug 调为 warning/error。
- 可选:将日志输出到 syslog 以便集中管理(需应用或 PHP 支持):
- 例如:
ini_set('error_log', 'syslog');
以上措施可显著降低日志量,从源头缓解磁盘压力。
- 例如:
五、建立长期监控与清理机制
- 定期清理归档:
- 示例(删除 30 天前的 PHP 归档):
find /var/log -name "php_*.log.*" -mtime +30 -delete
- 示例(删除 30 天前的 PHP 归档):
- 设置告警与容量阈值:
- 编写脚本监控日志目录使用率,超过阈值(如 500MB)时告警。
- 使用 Prometheus + Node Exporter 监控 /var/log 所在分区使用率。
- 定期演练与验证:
- 定期执行
logrotate -d/-f验证配置有效性,确保轮转与压缩按预期工作。
以上机制可提前发现异常增长并自动处置,避免再次“爆满”。
- 定期执行
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu PHP日志满怎么办
本文地址: https://pptw.com/jishu/752080.html
