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

AWS Elastic Beanstalk中PM2启动Soketi无进程显示问题

在AWS Elastic Beanstalk中PM2启动Soketi进程不显示的问题排查与解决

问题场景

你在AWS Elastic Beanstalk中通过bash脚本部署Soketi,脚本能完成所有依赖安装且无报错,但执行pm2 status时看不到Soketi进程;直接在EC2实例手动执行相同的启动命令却能正常运行。

核心原因

这是PM2的用户级进程隔离导致的:

  • 脚本中用sudo安装pm2并启动进程,此时PM2进程属于root用户;而你手动登录EC2用的是ec2-user,PM2会维护不同用户的独立进程列表,普通用户执行pm2 status看不到root用户的进程。
  • Elastic Beanstalk的部署脚本默认以root或服务用户上下文执行,和你手动操作的用户环境不一致。

解决方案

方案1:统一用ec2-user执行PM2相关操作

修改脚本,确保npm和pm2的安装、启动都以ec2-user身份执行,避免用户上下文差异:

#!/bin/bash
cd /var/app/current/

# 安装Node.js(需要sudo权限)
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs

# 切换到ec2-user执行npm全局安装
sudo -u ec2-user npm install -g npm
sudo -u ec2-user npm install -g @soketi/soketi
sudo -u ec2-user npm install -g pm2

# 以ec2-user身份启动Soketi进程
sudo -u ec2-user pm2 start soketi -- start --config=/var/app/current/my_soketi/config.json

# 保存进程列表,确保实例重启后自动恢复
sudo -u ec2-user pm2 save

# 配置PM2开机自启(针对ec2-user)
sudo -u ec2-user pm2 startup systemd -u ec2-user --hp /home/ec2-user

方案2:查看root用户的PM2进程

如果不想修改脚本,可以在EC2实例中用sudo查看root用户的PM2进程:

sudo pm2 status

如果这里能看到Soketi进程,后续管理该进程时都需要加sudo前缀,比如sudo pm2 restart soketi。

额外优化点

  • 确保PM2路径在环境变量中:在脚本开头添加PATH配置,避免路径找不到的问题:
    export PATH=$PATH:/home/ec2-user/.npm-global/bin
    
  • 修复配置文件权限:确保ec2-user能读取Soketi配置文件:
    sudo chown ec2-user:ec2-user /var/app/current/my_soketi/config.json
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:54:59