You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
  • 创建专属目录并配置:
    1. 创建目录:sudo mkdir -p /var/run/passenger-instances;
    2. 设置权限:sudo chown deploy:deploy /var/run/passenger-instances(替换为你的应用运行用户);
    3. 修改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;
  • 防止被系统清理:在/etc/tmpfiles.d/passenger.conf中添加一行d /var/run/passenger-instances 0755 deploy deploy -,告知系统不要清理该目录。

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:05:32