温馨提示×

centos php日志怎么轮转

小樊
42
2026-09-09 02:51:39
栏目: 编程语言

在 CentOS 上,PHP 本身的日志(如 error_log 指定的文件)不会自动轮转,通常需要借助 logrotate 来实现。下面分几种常见情况说明。


一、先确认 PHP 日志位置

查看 php.ini:

php --ini

php -i | grep error_log

常见路径:

  • /var/log/php-fpm/error.log(PHP-FPM)
  • /var/log/php_errors.log
  • 应用自定义日志(如 Laravel:storage/logs/laravel.log

二、使用 logrotate(推荐)

1. 创建 logrotate 配置

示例:PHP-FPM 日志轮转

sudo vi /etc/logrotate.d/php-fpm

内容示例:

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

如果是 CentOS 默认用户,通常是 apachenginx


2. 应用日志(如 Laravel)

sudo vi /etc/logrotate.d/laravel
/var/www/html/storage/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    copytruncate
}

copytruncate 适合不支持信号重开的程序


3. 测试 logrotate

手动测试:

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

强制执行:

sudo logrotate -f /etc/logrotate.d/php-fpm

三、PHP-FPM 自带日志(pool 配置)

如果是 PHP-FPM pool 日志:

sudo vi /etc/php-fpm.d/www.conf
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www-error.log

然后配合上面的 logrotate 即可。


四、常见坑

  1. 权限问题
    • 日志文件属主要和 PHP 运行用户一致
  2. PHP 不重新打开日志
    • reload php-fpmcopytruncate
  3. SELinux
    ls -Z /var/log/php-fpm/
    

五、总结

✅ CentOS 上 PHP 日志轮转标准做法:

  • logrotate
  • PHP-FPM:reload
  • 普通 PHP 日志:copytruncate

如果你能告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • PHP 运行方式(php-fpm / cli / Apache mod_php)
  • 具体日志路径

我可以给你一份完全贴合你环境的配置

0