温馨提示×

如何分割CentOS PHP日志

小樊
37
2026-08-30 08:04:01
栏目: 编程语言

在 CentOS 上分割(轮转)PHP 日志,通常做法有三种:使用 logrotate(推荐)手动切割脚本在 PHP-FPM 配置中处理。下面按场景详细说明。


一、使用 logrotate(最推荐 ✅)

CentOS 自带 logrotate,非常适合按天/大小分割日志。

1️⃣ 找到 PHP 日志位置

常见位置:

# PHP-FPM 错误日志
/var/log/php-fpm/error.log

# PHP-FPM slow 日志
/var/log/php-fpm/slow.log

# Nginx + PHP 的 PHP 错误日志
/var/log/php_error.log

2️⃣ 创建 logrotate 配置

vim /etc/logrotate.d/php-fpm

示例配置(✅ 推荐):

/var/log/php-fpm/*.log {
    daily
    rotate 30
    missingok
    notifempty
    compress
    delaycompress
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload php-fpm > /dev/null 2>&1 || true
    endscript
}

参数说明

参数 作用
daily 每天分割
rotate 30 保留 30 天
compress gzip 压缩
create 重新创建日志文件
postrotate 切割后重新加载 php-fpm(防止不写日志)

3️⃣ 立即测试

logrotate -vf /etc/logrotate.d/php-fpm

二、PHP-FPM 自带日志分割(部分版本)

某些 PHP-FPM 版本支持 php_admin_value[error_log] 自动切换,但不推荐,可控性差。


三、手动切割(适合特殊需求)

示例脚本

#!/bin/bash
LOG=/var/log/php-fpm/error.log
DATE=$(date +%Y-%m-%d)

mv $LOG $LOG-$DATE
touch $LOG
chown www-data:www-data $LOG
systemctl reload php-fpm

加入定时任务:

crontab -e
0 0 * * * /usr/local/bin/php-log-rotate.sh

四、Nginx + PHP 场景下常见坑 ⚠️

✅ 一定要 reload php-fpm

否则旧日志文件句柄还在,日志不会写入新文件。

systemctl reload php-fpm

五、确认 PHP-FPM 日志配置

vim /etc/php-fpm.d/www.conf

重要项:

php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_flag[log_errors] = on

六、推荐方案总结 ✅

场景 推荐方案
生产环境 ✅ logrotate
自定义时间 logrotate + cron
容器环境 logrotate 或 stdout

如果你愿意,可以告诉我:

  • PHP 版本(php -v
  • 是 Apache 还是 Nginx
  • 日志路径

我可以帮你 直接生成一份可用的 logrotate 配置

0