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
相关产品推荐
相关产品推荐

