2016-09-15 138 views
2

我正在尝试使用AWS CodeDeploy来部署我的应用程序。一切似乎工作正常,但我得到以下错误。CodeDeploy PM2命令未找到

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

任何想法?

回答

0

所有的生命周期事件的发生顺序,如果他们有脚本运行:

  1. ApplicationStop
  2. DownloadBundle(保留CodeDeploy)
  3. BeforeInstall
  4. 安装(保留CodeDeploy)
  5. AfterInstall
  6. ApplicationStart
  7. ValidateService

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

+0

不太确定我会如何检查。这是一个非常奇怪的错误。 –

1

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

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

如果您在ApplicationStop步运行

npm install pm2 -g 

,那么它不会被运行,直到你第二次部署为ApplicationStop是在以前的部署归档束运行。

+0

我认为这实际上是我的问题。很高兴知道如果我再次遇到它。谢谢! –

0

我刚刚遇到了这个问题。

我能够通过确保在我的CodeDeploy脚本文件的所有的开始处运行以下代码来解决此问题。

export NVM_DIR="$HOME/.nvm" 
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm