如何在重启后保留 UNIX 套接字(RasPi、Arch、chroot)

如何在重启后保留 UNIX 套接字(RasPi、Arch、chroot)

我在 RasPi 上的 Arch Linux 下设置了 nginx 和 php-fpm。nginx 是在 chroot 中设置的,如维基百科php-fpm.conf。当并nginx.conf设置为监听127.0.0.1:9000并且php-fpm.conf不声明 pid 的路径时,一切运行正常。

现在我想更改设置以使用 UNIX 套接字,正如网络上所建议的那样。因此我添加了php-fpm.conf以下内容。

pid = /srv/http/run/php-fpm/php-fpm.pid
...
[www]
chroot = /srv/http;
listen = /srv/http/run/php-fpm/php-fpm.sock

也替换fastcgi_passnginx.conf

fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;

当我手动创建.sock文件并重新启动 php-fpm 和 nginx 时,它可以工作。但是每当我重新启动时,php-fpm目录和.sock文件都会消失...

我如何在重启后保留它们?/etc/fstab包括

tmpfs           /srv/http/run   tmpfs   rw,noexec,relatime,size=1024k   0       0
tmpfs           /srv/http/tmp   tmpfs   rw,noexec,relatime,size=102400k 0       0

答案1

不能。这与重启后保留 TCP 连接是一样的。套接字由侦听它(在您的例子中是php-fpm)并nginx连接到它的进程创建。如果您因为nginx无法打开它而遇到问题,您很可能以错误的顺序启动了您的服务(您必须php-fpm在启动之前启动nginx,以便启动时套接字存在nginx)。

答案2

tmpfiles(systemd 的一部分)将创建和删除临时/易失性目录和文件。通常这些目录和文件放在 /run 或 /tmp 中,但它可以在任何地方工作。

要在启动时创建目录 /srv/http/run/php-fpm,请在以下位置创建配置文件/etc/tmpfiles.d像这样:

d /srv/http/run/php-fpm 0755 http http -

这将为 http 用户和组(Arch 的默认 php-fpm/web 用户)创建具有权限 0755 的目录

该文件可以随意命名,但必须以 .conf 结尾。例如 (php-fpm.conf

套接字本身是由 php-fpm 在启动时创建的,因此请确保它在 systemd 中已启用:

systemctl enable php-fpm

相关内容