Bash スクリプトから環境変数を読み取れません。

Bash スクリプトから環境変数を読み取れません。

codecommit/codebuild/codedeployを介してAWSのEC2インスタンスにNodejsアプリケーションをデプロイしようとしています。私のcodedeployのappspec.ymlファイルには、アプリケーションの起動時に呼び出されるapplication_start.shというスクリプトがあります。 pm2の再起動に使用します。

#!/bin/bash

pm2 delete /home/ubuntu/server/app.js 2> /dev/null
CREDENTIALS_SOURCE=$CREDENTIALS_SOURCE pm2 start /home/ubuntu/server/app.js --update-env

ご覧のとおり、Nodejsコードのenv変数を設定するためにbashスクリプトから読み取るenv変数($ CREDENTIALS_SOURCE)があります。

問題は、スクリプトが最初に実行されると(awsパイプラインを介して自動的に)$ CREDENTIALS_SOURCE変数を読み取ることができず、サーバーがクラッシュすることです。サーバーにSSHで接続し、shスクリプトとまったく同じコマンドを実行すると機能します。

CREDENTIALS_SOURCE=devサーバー環境変数から読み取るのではなく、bashスクリプトを「dev」にハードコードするように変更するときにも機能します。

私はexport CREDENTIALS_SOURCE=dev.bashrcにあり、それをインポートしました。これにより、printenv環境変数が表示されます。

ベストアンサー1

解決策を見つけて動作しますが、それが正しい方法であるかどうかはわかりません。

明らかに、pm2はサーバーから環境変数を読み取ることができません。 nodeJSアプリケーションは、.NETをnode app.js実行するのではなく、実行時にenv変数にアクセスできます。pm2 start app.js

次のコマンドを使用してpm2で動作させるようにしました。

sudo -E pm2 start app.js

私の考えでは、env変数がUbuntuユーザーではなくrootユーザーに保存されているようです。そうですか?


上記の方法は完璧な解決策ではありません。より良いソリューション:

  1. export CREDENTIALS_SOURCE=dev追加する/etc/profile
  2. source /etc/profile始めるapplication_start.sh前に追加pm2

動作します!

源泉:

おすすめ記事