Ubuntu PHP日志满的排查与处置
一、先定位日志来源
find . -name "*.log" | grep -i php二、立即止损与清理
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.logrm -rf 或随意删除正在写入的日志,可能造成句柄异常或短暂中断。三、根治 配置日志轮转 Logrotate
sudo nano /etc/logrotate.d/php/var/log/php_errors.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
}
sudo nano /etc/logrotate.d/php-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四、减少日志产生的源头
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATEDerror_log = /var/log/php_errors.logini_set('error_log', 'syslog');五、建立长期监控与清理机制
find /var/log -name "php_*.log.*" -mtime +30 -deletelogrotate -d/-f 验证配置有效性,确保轮转与压缩按预期工作。