找不到 CodeDeploy PM2 命令

Cha*_*ish 6 linux bash node.js npm aws-code-deploy

我正在尝试使用 AWS CodeDeploy 来部署我的应用程序。一切似乎都运行良好,但出现以下错误。

[stderr]/opt/codedeploy-agent/deployment-root/f1ea67bd-97bo-08q1-b3g4-7b14becf91bf/d-WJL0QLF9H/deployment-archive/scripts/start_server.sh:第3行:pm2:找不到命令

下面是我的 start_server.sh 文件。

#!/bin/bash
pm2 start ~/server.js -i 0 --name "admin" &
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用 SSH 以用户 ubuntu 身份连接到我的服务器并运行该 bash 文件,并且它运行完美,没有错误。所以我知道 PM2 已安装并在该用户上正常工作。

下面也是我的 appspec.yml 文件。

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu
hooks:
  ApplicationStart:
    - location: scripts/start_server.sh
      timeout: 300
      runas: ubuntu
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: ubuntu
Run Code Online (Sandbox Code Playgroud)

也不确定这是否有帮助,但这是我的 stop_server.sh 文件。

#!/bin/bash
npm install pm2 -g
pm2 stop admin || true
pm2 delete admin || true
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

小智 5

执行以下步骤:

  1. 哪个节点
  2. sudo ln -s /home/ubuntu/.nvm/versions/node/v12.13.1/bin/node

(上述步骤的输出)/usr/bin/node

  1. which pm2
  2. sudo ln -s /home/ubuntu/.nvm/versions/node/v12.13.1/bin/pm2

(上述步骤的输出)/usr/bin/pm2

并按如下方式使用它(作为 ubuntu 运行 start.sh)start_server.shstop_server.sh

sudo /usr/bin/pm2 status
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助!!


小智 1

如果有脚本要运行,所有生命周期事件都按顺序发生:

  1. 应用停止
  2. DownloadBundle(为 CodeDeploy 保留)
  3. 安装前
  4. 安装(为 CodeDeploy 保留)
  5. 安装后
  6. 应用程序启动
  7. 验证服务

如果您的部署已到达 ApplicationStart 步骤,则意味着您的 ApplicationStop 生命周期事件已成功。您能否确保“pm2 stop admin”成功(意味着pm2已安装)。