2016-09-15 4 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ファイルです。

ユーザ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 
関連する問題