2016-09-15 145 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