如何配置PM2通过GitHub Action触发?解决‘pm2未找到’报错
问题原因及解决办法
核心问题
你遇到的pm2: not found错误,本质是GitHub Action通过SSH执行命令时,使用的是非交互式/非登录Shell,导致环境变量PATH不包含PM2的实际路径,或者指定的PM2路径在当前Shell环境下不可用。
从日志和你提供的信息来看,虽然服务器上存在两个PM2路径,但执行脚本时的Shell环境无法访问到它们:
- 你在package.json里指定的
/usr/local/bin/pm2,在当前Shell下实际不存在(或无权限访问); - 另一个PM2路径
/root/.nvm/versions/node/v16.19.1/bin/pm2是通过nvm安装的,但非交互式Shell默认不会加载nvm的环境配置,直接调用也会找不到。
具体解决办法
办法1:直接使用PM2的绝对路径(最直接)
把package.json里的脚本改成使用nvm下的PM2绝对路径:
"pm2:start": "/root/.nvm/versions/node/v16.19.1/bin/pm2 restart ecosystem.config.js --time"
或者在GitHub Action的SSH脚本里直接调用这个路径,跳过npm脚本:
script: | chown -R root /opt/project cd /opt/project yarn /root/.nvm/versions/node/v16.19.1/bin/pm2 restart ecosystem.config.js --time
办法2:加载nvm环境配置
如果想继续使用pm2命令而不是绝对路径,需要在执行npm脚本前先加载nvm的配置文件,因为非交互式Shell不会自动加载:
script: | chown -R root /opt/project cd /opt/project yarn source /root/.nvm/nvm.sh # 加载nvm环境,让pm2命令可用 npm run pm2:start
如果nvm的配置在~/.bashrc或~/.profile里,也可以换成source ~/.bashrc。
办法3:修复/usr/local/bin/pm2的软链接
如果确定要使用/usr/local/bin/pm2路径,先登录服务器检查这个软链接是否有效:
ls -l /usr/local/bin/pm2
如果显示软链接失效(比如指向不存在的路径),重新创建软链接:
ln -s /root/.nvm/versions/node/v16.19.1/bin/pm2 /usr/local/bin/pm2
同时确保该路径对SSH登录用户有执行权限。
内容的提问来源于stack exchange,提问作者sahil
相关产品推荐
相关产品推荐

