CentOS7下启动php74-php-fpm时如何自动创建socket目录?
CentOS7下解决remi源php74-php-fpm启动时/run/php-fpm目录缺失的问题
问题场景
在CentOS7上同时部署原生PHP和remi源的PHP7.4,将php74-php-fpm的监听方式从TCP Socket改为Unix Socket,配置如下:
listen = /run/php-fpm/php74.sock listen.owner = nobody listen.group = nobody listen.mode = 0666
当所有PHP服务都运行时正常,但单独启动php74-php-fpm时,因/run/php-fpm目录不存在导致启动失败。尝试通过systemctl edit添加RuntimeDirectory配置未生效,需用标准方式解决目录自动创建问题。
标准解决方案
方案1:使用tmpfiles.d配置(推荐)
tmpfiles.d是systemd管理临时文件/目录的标准机制,可在系统启动或服务启动前自动创建所需目录:
- 创建配置文件:
echo "d /run/php-fpm 0755 root root -" > /etc/tmpfiles.d/php74-fpm.conf
- 立即生效配置(无需重启系统):
systemd-tmpfiles --create /etc/tmpfiles.d/php74-fpm.conf
此后无论何时启动php74-php-fpm,/run/php-fpm目录都会被自动创建,系统重启后也会自动重建。
方案2:修正systemd服务单元配置
如果偏好通过服务单元本身控制目录创建,可调整php74-php-fpm的systemd配置:
- 编辑服务单元的覆盖文件:
systemctl edit php74-php-fpm.service
- 添加以下配置内容:
[Service] RuntimeDirectory=php-fpm RuntimeDirectoryMode=0755 RuntimeDirectoryPreserve=yes
- 重新加载systemd配置并重启服务:
systemctl daemon-reload systemctl restart php74-php-fpm
RuntimeDirectoryPreserve=yes可确保目录在服务停止后被保留(或启动时自动创建),解决之前配置未生效的问题。
内容的提问来源于stack exchange,提问作者Alien Life Form
相关产品推荐
相关产品推荐

