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

EC2实例通过CodeDeploy部署时pm2命令未找到问题求助

解决CodeDeploy执行脚本时找不到pm2的问题

问题分析

手动在EC2实例中能正常执行pm2,但CodeDeploy部署时执行application_stop.sh报错pm2: command not found,核心原因是CodeDeploy Agent的执行环境与你手动登录时的shell环境不同:

  • 手动登录时加载了nvm的环境变量,能找到pm2;
  • CodeDeploy以root(或其他无nvm配置的用户)执行脚本,默认PATH里没有pm2的路径,且未加载nvm配置。

解决方案

方案1:脚本中直接使用pm2的绝对路径

修改application_stop.sh,把pm2替换为完整的绝对路径(不要用~,因为CodeDeploy的HOME环境变量不是ec2-user的):

#!/bin/bash
#Stopping existing node servers
echo "Stopping any existing node servers"
/home/ec2-user/.nvm/versions/node/v16.15.1/bin/pm2 stop main

方案2:在脚本中加载nvm环境

如果后续还要用到nvm管理的其他命令,可以在脚本开头先加载nvm的配置文件,确保环境变量正确:

#!/bin/bash
# 加载nvm环境
source /home/ec2-user/.nvm/nvm.sh
#Stopping existing node servers
echo "Stopping any existing node servers"
pm2 stop main

方案3:将pm2软链接到系统全局PATH目录

你之前创建软链接时未指定目标目录,导致软链接只在当前目录生效,需要把软链接创建到系统默认PATH包含的目录(比如/usr/local/bin):

sudo ln -s /home/ec2-user/.nvm/versions/node/v16.15.1/bin/npm /usr/local/bin/npm
sudo ln -s /home/ec2-user/.nvm/versions/node/v16.15.1/bin/node /usr/local/bin/node
sudo ln -s /home/ec2-user/.nvm/versions/node/v16.15.1/bin/pm2 /usr/local/bin/pm2

执行完后,CodeDeploy的脚本就能直接使用pm2命令了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:15:30