说明
系统:macOS 10.14.6
PHP:homebrew 安装的 PHP8.0.20 (fpm-fcgi)
除了有 php-fpm.conf 配置文件外,通常还有其他的 *.conf 配置文件(也可以不要,直接在 php-fpm.conf 配置)用于配置进程池,不同的进程池可以用不同的用户执行,监听不同的端口,处理不同的任务;多个进程池共用一个全局配置。
关于路径问题,原文是这样说的:
All relative paths in this configuration file are relative to PHP’s install prefix (/usr/local/Cellar/php@8.0/8.0.20). This prefix can be dynamically changed by using the ‘-p’ argument from the command line.
“此配置文件中的所有相对路径都相对于 PHP 的安装前缀。 可以使用命令行中的“-p”参数动态更改此前缀。”。
通过 phpinfo() 看到编译参数 ‘–prefix=/usr/local/Cellar/php@8.0/8.0.20’ ‘–localstatedir=/usr/local/var’
所以我的环境下,prefix=/usr/local/Cellar/php@8.0/8.0.20。按照他的说法,如果我使用以下设置:
pid = run/php-fpm.pid
error_log = log/php-fpm.log
那么应该出现以下两个文件
/usr/local/Cellar/php@8.0/8.0.20/run/php-fpm.pid
/usr/local/Cellar/php@8.0/8.0.20/log/php-fpm.log
但实际出现的是以下两个文件
/usr/local/var/run/php-fpm.pid
/usr/local/var/log/php-fpm.log
也就是说这两个指令的相对地址是/usr/local/var(从结果上对应“–localstatedir”)。看原文说明也特别说明了他们的相对地址是 /usr/local/var:
; Pid file
; Note: the default prefix is /usr/local/var
; Default Value: none
pid = run/php-fpm.pid
; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /usr/local/var
; Default Value: log/php-fpm.log
error_log = log/php-fpm.log
不明白是上下文为什么会有这种冲突。难道这两个指令是相对于 localstatedir?不管是他的问题还是我理解的问题,涉及的路径的问题,最好还是直接使用完整路径,放在哪了清晰明了。
一、php-fpm.conf 文件
1.全局配置(Global Options)
pid = /usr/local/var/run/php8.0-fpm.pid
#fpm 主进程 pid 存放位置,进程会根据设置自动生成文件
error_log = /usr/local/var/log/php8/php-fpm.log
#错误日志存放位置,设置成本地文件即可,进程会根据设置自动生成文件
#若设置成"syslog",日志将发送给 syslogd。(syslogd 不熟悉可以无视)
针对 error_log = syslog 个人建议有明确需要再来关注这两个指令
;syslog.facility = daemon
#用于说明正在记录消息的程序是什么类型,
#syslogd 可以对不同类型的 facility(设备)信息采取不同的处理方式。
#当前环境默认:daemon(可能是因为我们通常是以守护进程的方式在运行 fpm)以下是可以被
#识别的值:
#kern 内核信息,首先通过 klogd 传递;
#user 用户进程;
#mail 邮件;
#daemon 后台进程;
#authpriv 授权信息;
#syslog 系统日志;
#lpr 打印信息;
#news 新闻组信息;
#uucp 由uucp生成的信息
#cron 计划和任务信息。
#mark syslog 内部功能用于生成时间戳
#local0----local7 与自定义程序使用,例如使用 local5 做为 ssh 功能
#扩展阅读:https://blog.csdn.net/zyy617532750/article/details/74942090
;syslog.ident = php-fpm
#当启用了多割进程池,这一项负责区分出不同的进程池消息,所有有多个进程池配置时,此项的值应该也不同
#当前环境默认:php-fpm
;log_level = notice
#记录日志的级别:alert、error、warning、notice、debug。当前环境默认:notice
;log_limit = 1024
#单行字符数。如果该行超出限制,则换行。当前环境默认:1024。
;log_buffering = yes 重日志场景关注此项
#google 翻译:日志缓冲指定日志行是否被缓冲,这意味着该行是在单个写入操作中写入的。
#如果值为 false,则数据直接写入文件描述符。这是一个实验性的选项,可以在一些繁重的日志
#记录场景中潜在地提高日志记录性能和内存使用率。如果记录到 syslog,则忽略此选项,
#因为它必须始终被缓冲。
#当前环境默认:yes
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
#表示在 emergency_restart_interval 所设置的时间内(如设置:60s)出现SIGSEGV
#或者SIGB