RH8.10中Apache/Passenger配置下/tmp/passenger.spawn.XXX未创建原因
可能的原因及对应解决方法
Apache的PrivateTmp隔离机制
RH8.10的Apache默认启用PrivateTmp=true(配置位于/usr/lib/systemd/system/httpd.service或/etc/systemd/system/httpd.service.d/下的自定义配置文件)。该配置会给Apache进程分配独立的临时文件系统,和系统真实的/tmp完全隔离。你手动在系统/tmp创建的目录,Apache/Passenger进程根本无法访问,重启httpd后自然仍会出现目录缺失问题。
解决:修改httpd的systemd配置,将PrivateTmp改为false,执行systemctl daemon-reload和systemctl restart httpd生效。Passenger临时目录配置被篡改
检查Apache配置文件(如httpd.conf)或应用目录下的.htaccess,确认是否设置了PassengerTempDir指定了非默认的临时路径。如果该路径不存在、权限不足,或第三方自动化工具(如Ansible、Puppet)篡改了该配置,会导致spawn目录无法自动创建。
解决:查看PassengerTempDir的配置值,确保目标目录存在且root用户拥有读写权限;若无需自定义路径,直接注释该配置项即可。系统/tmp目录的权限或挂载属性异常
虽然root用户拥有/tmp的写入权限,但如果/tmp的权限被修改为非默认的1777(粘滞位权限,允许所有用户读写但仅能删除自身文件),或挂载时添加了额外限制属性(如错误的ACL规则),会干扰Passenger创建带执行权限的spawn目录。
解决:执行chmod 1777 /tmp恢复默认权限;用mount | grep /tmp检查挂载属性,确保无异常限制。Passenger进程残留导致的逻辑异常
重启httpd后,可能仍有Passenger核心进程残留,导致目录创建逻辑未正常触发。
解决:执行pkill -9 passenger-core彻底清除所有Passenger相关进程,再重启httpd服务。Passenger版本兼容性问题
Passenger 6.0.23与RH8.10默认的Apache 2.4版本可能存在兼容性细节问题,导致临时目录自动创建逻辑失效。
解决:尝试升级Passenger至最新稳定版,或降级到经RH8.10验证的兼容版本。
内容的提问来源于stack exchange,提问作者user1583211

