You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在php-fpm.conf中为慢日志文件名添加日期实现日志轮转?

PHP-FPM慢日志添加日期实现轮转的配置问题

你的这种配置方式不可行,原因是PHP-FPM的配置文件不支持解析Shell命令或自定义变量引用:

  • 配置里的$(date +"%Y-%m-%d")会被当作普通字符串处理,不会执行Shell命令生成日期
  • $date也无法被PHP-FPM识别为变量,启动时会尝试创建包含无效字符的日志文件路径,导致启动失败

推荐的实现方案

方案1:使用logrotate工具(最稳定推荐)

这是Linux系统自带的标准日志轮转工具,无需修改PHP-FPM核心配置,步骤如下:

  1. 保持PHP-FPM配置中的慢日志路径为固定值:
    [www]
    slowlog = /var/www/html/perf/slow.log
    request_slowlog_timeout = 3s
    
  2. 创建logrotate配置文件,比如/etc/logrotate.d/php-fpm-slowlog,写入以下内容:
    /var/www/html/perf/slow.log {
        daily          # 每天轮转一次
        rotate 30      # 保留最近30天的日志
        compress       # 压缩旧日志文件
        missingok      # 日志文件不存在时不报错
        notifempty     # 空日志文件不进行轮转
        postrotate
            systemctl reload php-fpm  # 轮转后重载PHP-FPM,使其切换到新日志文件
        endscript
    }
    
  3. 保存后,logrotate会自动按配置执行轮转(系统默认每天执行一次,也可以手动执行logrotate /etc/logrotate.d/php-fpm-slowlog测试)

方案2:通过启动脚本动态指定日志路径(不推荐)

如果一定要让日志文件名自带日期,可以通过修改PHP-FPM的启动脚本实现,以systemd服务为例:

  1. 修改PHP-FPM的systemd服务文件(通常路径为/usr/lib/systemd/system/php-fpm.service)
  2. 在[Service]段中,将原ExecStart替换为动态生成日志路径的命令:
    ExecStart=/bin/sh -c 'php-fpm -y /etc/php-fpm.conf --slowlog /var/www/html/perf/slow-$(date +%Y-%m-%d).log'
    
  3. 重新加载systemd配置并重启PHP-FPM:
    systemctl daemon-reload
    systemctl restart php-fpm
    

注意:这种方式依赖Shell命令执行,不同PHP-FPM版本可能不支持命令行参数覆盖配置,且维护成本较高,不如logrotate方案可靠

内容的提问来源于stack exchange,提问作者lobafox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:05:08