CentOS7下启动php74-php-fpm时如何自动创建/run/php-fpm套接字目录?
CentOS7下启动php74-php-fpm时如何自动创建/run/php-fpm套接字目录?
我来帮你解决这个问题!你遇到的情况其实是Remi仓库的php74-php-fpm服务默认没有配置自动创建/run/php-fpm目录,而原生php-fpm依赖systemd的RuntimeDirectory机制来自动生成这个目录。下面给你几个符合systemd规范的标准解决办法,不用折腾shell脚本这类hack:
方法一:修复systemd drop-in配置的生效问题
你已经尝试用systemctl edit php74-php-fpm.service添加了RuntimeDirectory配置,但可能因为没重载systemd配置或者格式小问题导致没生效。按以下步骤操作:- 重新编辑服务配置:
systemctl edit php74-php-fpm.service - 确保配置内容格式正确,没有多余空格或语法错误:
[Service] RuntimeDirectory=php-fpm RuntimeDirectoryMode=0755 - 保存退出后,重载systemd配置让修改生效:
systemctl daemon-reload - 重启php74-php-fpm服务:
这时候systemd会在启动服务前自动创建systemctl restart php74-php-fpm.service/run/php-fpm目录,完全符合原生php-fpm的标准实现逻辑。
- 重新编辑服务配置:
方法二:通过tmpfiles.d配置永久创建目录
如果第一种方法仍不生效,或者你希望/run/php-fpm目录在系统启动时就自动创建(毕竟/run是临时文件系统,重启后会清空),可以通过tmpfiles机制配置:- 创建tmpfiles配置文件:
vi /etc/tmpfiles.d/php-fpm.conf - 添加以下内容:
这里的参数含义:d /run/php-fpm 0755 root root -d代表创建目录,后面依次是路径、权限、所有者、所属组、过期时间(-表示不过期)。 - 执行命令让配置立即生效(无需重启系统):
之后每次系统启动,这个目录都会被自动生成,php74-php-fpm启动时就不会因为找不到目录而失败了。systemd-tmpfiles --create /etc/tmpfiles.d/php-fpm.conf
- 创建tmpfiles配置文件:
额外注意事项
你已经设置的套接字权限:listen.owner = nobody listen.group = nobody listen.mode = 0666是完全没问题的,
/run/php-fpm目录的0755权限允许nobody用户在其中创建和操作套接字,无需调整。
备注:内容来源于stack exchange,提问作者Alien Life Form
相关产品推荐
相关产品推荐

