配置 logrotate 实现PHP-FPM的自动日志分割与清理 (推荐的最佳实践)

 配置 logrotate 实现PHP-FPM的自动日志分割与清理 (推荐的最佳实践)

在生产服务器上,最佳实践是使用 logrotate 工具来自动管理日志文件。logrotate 可以定期地将旧日志打包、压缩、重命名,并创建新的空日志文件,同时只保留一定数量的旧日志。

Ubuntu Server通常已经安装了logrotate。PHP的安装包通常也会自动创建一个基础的 logrotate 配置文件,我们可以检查并优化它。

步骤 1:检查或创建 logrotate 配置文件

下边以PHP 7.4版本举例,php-fpm 的 logrotate 配置文件通常位于 /etc/logrotate.d/php7.4-fpm

可以使用 cat 命令查看现有配置:

cat /etc/logrotate.d/php7.4-fpm

如果文件不存在,或者配置不理想,可以创建或修改它。使用编辑器(如 nano 或 vim)打开文件:

sudo nano /etc/logrotate.d/php7.4-fpm

将以下内容粘贴到文件中。这是一个非常实用的配置:

/var/log/php7.4-fpm.log {
    # 每天轮替一次
    daily
    # 如果日志文件不存在,也不报错
    missingok
    # 保留最近14天的日志文件
    rotate 14
    # 对轮替后的旧日志进行压缩
    compress
    # 等到下一次轮替时再压缩,方便查看最近一天的旧日志
    delaycompress
    # 如果日志文件为空,则不进行轮替
    notifempty
    # 轮替后创建新文件,并设置权限为 640,所有者为 www-data,组为 adm
    # 这确保了 php-fpm 进程有权限写入新日志
    create 0640 www-data adm
    # 在轮替之后执行的脚本
    postrotate
        # 通知 php-fpm 主进程重新打开日志文件
        /usr/sbin/invoke-rc.d php7.4-fpm reload > /dev/null
    endscript
}

配置解释:

  • daily: 每天执行一次日志分割。对于流量不大的网站,也可以改为 weekly

  • rotate 14: 保留14个旧的日志文件(即14天的数据)。

  • compress: 使用gzip压缩旧的日志文件,节省空间。

  • create …: 在移动了旧日志后,创建一个新的空日志文件,并设置好正确的权限,以便php-fpm可以继续写入。

  • postrotate … endscript: 这是最关键的部分。它会在日志文件被重命名后,向php-fpm主进程发送一个 reload 信号。这个信号会告诉 php-fpm 重新打开新的 /var/log/php7.4-fpm.log 文件进行写入,从而确保日志记录不会中断。

测试配置

可以模拟运行 logrotate 来检查配置文件是否有语法错误:

sudo logrotate -d /etc/logrotate.d/php7.4-fpm

-d 参数表示调试模式,它只会显示将要执行的操作,但不会真的执行。如果没有任何错误信息,说明配置是正确的。

强制执行一次轮替(可选)

如果想立即让配置生效并执行一次日志分割,可以使用 -f 参数:

sudo logrotate -f /etc/logrotate.d/php7.4-fpm

 

❤️ 如果这篇文章对您有帮助,欢迎打赏支持

微信打赏二维码

扫描上方二维码,用微信打赏

吴川斌

吴川斌

Leave a Reply