Nginx下Phusion Passenger部署失败,误报“未运行”问题排查
问题背景
部署过程中出现如下报错:
Phusion Passenger(R) doesn't seem to be running. If you are sure that it is running, then the causes of this problem could be one of: [...]• You customized Nginx's passenger_instance_registry_dir option • The instance directory has been removed by an operating system background service. Please set a different instance registry directory Phusion Passenger(R) Standalone's --instance-registry-dir command line argument. [...]DEBUG [25d4f5b4] *** Cleaning stale instance directory /tmp/passenger.7OMaC6P Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.7OMaC6P/. *** Cleaning stale instance directory /tmp/passenger.0bmUABH Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.0bmUABH/. *** Cleaning stale instance directory /tmp/passenger.n1oLEes Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.n1oLEes/. *** Cleaning stale instance directory /tmp/passenger.RXBYda3 Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.RXBYda3/. *** Cleaning stale instance directory /tmp/passenger.TrAwTXq Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.TrAwTXq/. *** Cleaning stale instance directory /tmp/passenger.vZaExdN Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.vZaExdN/. *** Cleaning stale instance directory /tmp/passenger.dqTKpv1 Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.dqTKpv1/. *** Cleaning stale instance directory /tmp/passenger.hh2TxgL Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.hh2TxgL/. *** Cleaning stale instance directory /tmp/passenger.rjowwmi Warning: Operation not permitted @ rb_file_chown - /tmp/passenger.rjowwmi/.
执行passenger-status可正常运行,输出如下:
App root: /home/deploy/margin/current Requests in queue: 0 * PID: 110639 Sessions: 0 Processed: 46 Uptime: 12h 29m 50s CPU: 1% Memory : 409M Last used: 2m 50s * PID: 141836 Sessions: 0 Processed: 0 Uptime: 2m 46s CPU: 0% Memory : 17M Last used: 2m 46s ago
Passenger通过以下命令安装:
sudo apt-get install -y nginx-extras libnginx-mod-http-passenger if [ ! -f /etc/nginx/modules-enabled/50-mod-http-passenger.conf ]; then sudo ln -s /usr/share/nginx/modules-available/mod-http-passenger.load /etc/nginx/modules-enabled/50-mod-http-passenger.conf ; fi sudo ls /etc/nginx/conf.d/mod-http-passenger.conf
配置文件/etc/nginx/conf.d/mod-http-passenger.conf内容:
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /home/deploy/.rbenv/shims/ruby;
具体疑问
- 是否是这些无效实例目录导致故障?如何正确清理?
- 不确定当前运行的是Passenger Standalone还是Nginx集成版,如何验证?
- 从未修改过
passenger_instance_registry_dir,为何会出现这个问题? - 若系统后台服务修改了实例目录,如何验证?
- 设置实例目录的最佳实践是什么?
问题解答
1. 无效实例目录是否导致故障?如何清理?
这些残留的实例目录不会直接导致服务宕机,但会触发清理警告,本质是之前的Passenger进程异常退出后,残留目录的权限发生了变化(普通用户无chown权限)。
正确清理方法:
- 用管理员权限执行删除:
sudo rm -rf /tmp/passenger.*,因为这些目录是root权限创建的,普通用户无法操作; - 清理完成后重启Nginx或Passenger,避免后续再触发同类警告。
2. 验证当前运行的是Passenger Standalone还是Nginx集成版
两种方式快速验证:
- 看进程关联:执行
ps aux | grep passenger,如果能看到nginx进程和passenger-core/passenger-agent关联,就是Nginx集成版;如果只有passenger start相关进程、没有Nginx进程,就是Standalone版; - 结合安装方式判断:你用
apt安装的是libnginx-mod-http-passenger模块,属于Nginx集成版的标准安装方式,再配合sudo systemctl status nginx检查Nginx状态,若Nginx正常运行且加载了Passenger模块,即可确认是集成版。
3. 未修改passenger_instance_registry_dir为何出问题?
默认情况下Passenger会把实例目录放在/tmp下,而/tmp是系统临时目录,会被systemd-tmpfiles-clean这类后台服务定期清理旧文件/目录。如果Passenger进程运行时间较长,或者临时目录的清理规则过于激进,就可能被误删实例目录,后续进程访问时就会触发权限警告(残留目录的权限被清理服务修改)。
4. 验证是否是系统后台服务修改了实例目录
- 检查临时文件清理配置:查看
/etc/tmpfiles.d/或/usr/lib/tmpfiles.d/tmp.conf中的规则,看是否有针对/tmp/passenger.*的清理条目; - 查看系统日志:执行
sudo journalctl -u systemd-tmpfiles-clean.service,搜索passenger关键词,看是否有清理这些目录的记录; - 手动测试:创建一个测试目录
/tmp/passenger.test,观察一段时间后是否被删除或修改权限。
5. 设置实例目录的最佳实践
- 避开
/tmp目录:改用非临时目录,比如/var/run/passenger-instances; - 创建专属目录并配置:
- 创建目录:
sudo mkdir -p /var/run/passenger-instances; - 设置权限:
sudo chown deploy:deploy /var/run/passenger-instances(替换为你的应用运行用户); - 修改Passenger配置:
- Nginx集成版:在
/etc/nginx/conf.d/mod-http-passenger.conf中添加passenger_instance_registry_dir /var/run/passenger-instances;; - Standalone版:启动时添加参数
passenger start --instance-registry-dir /var/run/passenger-instances;
- Nginx集成版:在
- 创建目录:
- 防止被系统清理:在
/etc/tmpfiles.d/passenger.conf中添加一行d /var/run/passenger-instances 0755 deploy deploy -,告知系统不要清理该目录。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

