找不到CodeDeploy PM2命令

时间:2016-09-15 21:22:14

标签: node.js linux bash npm aws-code-deploy

我尝试使用AWS CodeDeploy部署我的应用程序。一切似乎都运转正常,但我收到了以下错误。

  

[标准错误] /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" &

我尝试使用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

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

#!/bin/bash
npm install pm2 -g
pm2 stop admin || true
pm2 delete admin || true

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

通常在这种情况下使用pm2的完整路径。

#!/bin/bash
/usr/local/bin/pm2 start ~/server.js -i 0 --name "admin" &

答案 1 :(得分:1)

如果你跑

npm install pm2 -g

ApplicationStop步骤,然后在第二次部署时,它将不会运行,因为ApplicationStop在先前的部署存档包上运行。

答案 2 :(得分:0)

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

  1. ApplicationStop
  2. DownloadBundle(为CodeDeploy保留)
  3. BeforeInstall
  4. 安装(为CodeDeploy保留)
  5. AfterInstall
  6. ApplicationStart
  7. ValidateService
  8. 如果您的部署已达到ApplicationStart步骤,这意味着您的ApplicationStop生命周期事件已成功完成。你能确定“pm2 stop admin”成功(意味着安装了pm2)。

答案 3 :(得分:0)

我刚刚再遇到这个问题。

我能够通过确保以下代码在我的CodeDeploy脚本文件的所有的开头运行来解决它。

adj

答案 4 :(得分:0)

执行以下步骤:

  1. 哪个节点
  2. sudo ln -s /home/ubuntu/.nvm/versions/node/v12.13.1/bin/node(以上步骤的输出)/ usr / bin / node
  3. 哪个pm2
  4. sudo ln -s /home/ubuntu/.nvm/versions/node/v12.13.1/bin/pm2(以上步骤的输出)/ usr / bin / pm2
在start_server.sh和stop_server.sh中的

如下使用它(以ubuntu运行start.sh):

sudo /usr/bin/pm2 status

希望这对您有帮助!