我在 CentOS7 上设置了多个 php 版本(本机和来自 remi repos)。安装后,本机 php-fpm ( 在 unix 套接字上设置,而 (remi) php74-php-fpm 将在 TCP 套接字上监听。我通过设置更改了这一点:
listen = /run/php-fpm/php74.sock
...
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
只要两个服务都在运行,这就可以了。但是,如果我停止这两个服务,然后仅启动 php74-php-fpm,套接字文件夹 (/run/php-fpm) 就会丢失,服务就会失败。我在明显的位置 (/usr/lib/tmpfiles.d/*) 查找文件夹创建,但那里没有提到。我还插入了 (通过 systemctl edit) 以下行:
[Service]
RuntimeDirectory=php-fpm
RuntimeDirectoryMode=0755
在 php74-php-fpm.service 中,(这些行来自本机 php-fpm)推测它们会让 systemd 在启动时创建文件夹,但这并没有发生。
因此问题是 - 如何在启动 php74-php-fpm 时强制创建文件夹?我宁愿不去处理 shell hack 之类的东西,因为我相信本机 php-fpm 使用了一种有点“标准”的方法,这是我更喜欢的。
TIA&欢呼。
答案1
因此事实证明添加:
[Service]
RuntimeDirectory=php-fpm
RuntimeDirectoryMode=0755
确实强制创建 /var/run/php-fpm 文件夹,但这是必要的仅有的在 Centos7 上。
当然,我搞砸了。我更换了 CentOS8 机器(不存在问题 - 底部部分解释了原因)和 CentOS7 机器,在 CentOS7 机器上运行了 systemctl edit,然后检查了 CentOS8 机器上是否存在 /run/php-fpm(终端太多)。
发生的事情是,CentOS8php-fpm 是 apache 的默认设置,remi www.conf 以及提供的 apache 配置 php74-php-fpm.conf 反映了这一点,将套接字文件夹设置为 /var/opt/remi/php74/run/php-fpm/(非易失性文件夹)。
在Centos7但是,mod_php 是默认设置,而 remi apache 配置文件没有提供 php-fpm(必须在站点配置文件中进行设置)。按照本机 php-fpm 配置,我将套接字文件夹设置为 /run/php-fpm,它是易失性的,由 systemd 管理 - 因此必须更改 php74-php-fpm 服务定义才能在启动时创建该文件夹。
因此,似乎存在多种管理可变目录的方法,我认为这很容易造成混淆和出错,因为似乎人们同时使用这两种方法,却没有明显的合理性。但我知道什么呢?
答案2
通过运行命令安装 PHP
sudo apt install php
接下来安装 php-fpm
sudo apt install php-fpm
php-fpm 将自动安装。通过运行以下命令检查 sock 文件的位置
find / -name "*fpm.sock"