AWS EC2重启后rc.local调用PM2启动脚本失败求助
解决AWS EC2重启自动启动Nginx和Node.js应用的问题
错误原因分析
status=203/EXEC错误通常由以下问题导致:
/etc/rc.local缺少正确的脚本解释器声明(shebang)- 脚本文件权限不足,无法执行
- 启动脚本中存在环境变量缺失(比如系统启动时找不到pm2)
修复步骤
1. 修正/etc/rc.local文件
原文件第一行是无效注释,需添加正确的shebang,同时确保脚本可执行:
#!/bin/bash # 调用启动脚本 /etc/startup_script.sh & exit 0
给rc.local添加执行权限:
sudo chmod +x /etc/rc.local
2. 修正/etc/startup_script.sh脚本
- 移除不必要的
sudo:rc.local以root用户执行,无需重复提权 - 明确pm2的绝对路径(避免系统启动时PATH环境不完整导致找不到命令),可先用
which pm2查看路径(示例路径为/usr/local/bin/pm2)
修改后的脚本内容:
#!/bin/bash # 启动Nginx systemctl start nginx.service # 启动PM2服务,替换为你的pm2实际路径 PM2_PATH=$(which pm2) $PM2_PATH start npm --name node_server1 $PM2_PATH start npm --name node_server2 $PM2_PATH start npm --name node_server3 $PM2_PATH start npm --name node_server4 $PM2_PATH save
给该脚本添加执行权限:
sudo chmod +x /etc/startup_script.sh
3. 更可靠的替代方案:使用systemd服务(推荐)
rc.local在部分现代Linux发行版兼容性较差,推荐用systemd服务管理自启:
设置Nginx开机自启
sudo systemctl enable nginx.service
设置PM2开机自启
- 保存当前PM2进程列表:
pm2 save
- 生成systemd配置文件(替换
ec2-user为你的实际用户名,/home/ec2-user为用户主目录):
pm2 startup systemd -u ec2-user --hp /home/ec2-user
- 启用并启动PM2服务:
sudo systemctl enable pm2-ec2-user sudo systemctl start pm2-ec2-user
验证修复效果
重启EC2实例后,执行以下命令检查状态:
# 检查Nginx运行状态 systemctl status nginx.service # 检查PM2进程列表 pm2 list
内容的提问来源于stack exchange,提问作者Akshata
相关产品推荐
相关产品推荐

