PHP sock 与 update-alternatives 选择有关吗?

PHP sock 与 update-alternatives 选择有关吗?

在我的 nginx 配置中,我将 PHP 指向为/var/run/php8.3-fpm.sock

因为该路径中有一个特定的版本,所以使用update-alternatives不会改变我的网站使用的 PHP 版本。

我如何获得一个指向我选择的 PHP 版本的套接字update-alternatives

目前没有/var/run我可以指出的与版本无关的 sock 文件。

答案1

编辑:

正如ᴍᴇʜᴏᴠ 所指出的,Debian支持update-alternatives套接字,但它的做法有点不同,有两个要求:

  • 您必须运行来自2020 年 2 月 1 日或更晚(希望如此)
  • 你必须跑步systemd与 sysvinit 相比

通用套接字位于/run/php/php-fpm.sock,由 systemd 单元文件通过调用 和 指令创建/usr/lib/php/php-fpm-socket-helperExecStartPost如果ExecStopPost您希望使用此套接字,您仍需要确保您的 Web 服务器配置指向它,而不是指向特定于版本的文件。

如果您不满足这些要求,请参阅以下原始答案。


看来您正在运行基于 Debian/Ubuntu 的发行版,该发行版有意将 php-fpm 安装在特定版本的位置(这就是您可以用来update-alternatives动态切换默认版本的全部原因)。但是,php-fpm 的套接字文件没有替代配置(您对 的调用update-alternatives只会更改 CLI PHP 版本/usr/bin/php)。

要使用的套接字文件在 中定义/etc/php/8.3/fpm/pool.d/www.conf

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php8.3-fpm.sock

如果你真的想要一个与版本无关的套接字文件,您可以将该设置更改为仅此listen = /run/php/php-fpm.sock,并相应地更新您的 nginx 配置。您需要对安装的每个 PHP 版本执行此操作,这也意味着您不能同时运行两个不同的 php-fpm 版本。

您也许可以尝试创建自己的update-alternative配置,以便/run/php/php-fpm.sock在版本之间切换,但我不确定以/run这种方式管理文件的效果如何。

答案2

这在 Debian 11 上似乎不是问题,我/run/php/php-fpm.sock也可以同时使用两者/etc/alternatives/php-fpm.sock

# ls -la /run/php
total 20
drwxr-xr-x  2 www-data www-data 260 Mar 29 19:24 .
drwxr-xr-x 20 root     root     600 Mar 29 19:24 ..
-rw-r--r--  1 root     root       3 Mar 29 19:24 php5.6-fpm.pid
srw-rw----  1 www-data www-data   0 Mar 29 19:24 php5.6-fpm.sock
-rw-r--r--  1 root     root       3 Mar 29 19:24 php7.3-fpm.pid
srw-rw----  1 www-data www-data   0 Mar 29 19:24 php7.3-fpm.sock
-rw-r--r--  1 root     root       3 Mar 29 19:24 php7.4-fpm.pid
srw-rw----  1 www-data www-data   0 Mar 29 19:24 php7.4-fpm.sock
-rw-r--r--  1 root     root       3 Mar 29 19:24 php8.2-fpm.pid
srw-rw----  1 www-data www-data   0 Mar 29 19:24 php8.2-fpm.sock
-rw-r--r--  1 root     root       3 Mar 29 19:24 php8.3-fpm.pid
srw-rw----  1 www-data www-data   0 Mar 29 19:24 php8.3-fpm.sock
lrwxrwxrwx  1 root     root      30 Mar 29 19:24 php-fpm.sock -> /etc/alternatives/php-fpm.sock

查看/etc/alternatives/php-fpm.sock指向的位置:

# stat /etc/alternatives/php-fpm.sock
  File: /etc/alternatives/php-fpm.sock -> /run/php/php8.3-fpm.sock

让我们使用以下命令将 PHP 重新配置为 5.6。它将向您显示可用的版本并提示输入一个数字。

update-alternatives --config php-fpm.sock

再检查一遍:

# stat /etc/alternatives/php-fpm.sock
  File: /etc/alternatives/php-fpm.sock -> /run/php/php5.6-fpm.sock

相关内容