Upstart - bashrc変数のロード

Upstart - bashrc変数のロード

bashrcupstartスクリプトで変数をロードして実行する方法(node.jsこの場合はサーバー)を知りたいです。

最良のアプローチは何ですか?

私はこれを試しました:

exec sudo -u someuser $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

この

exec start-stop-daemon --start -c someuser --exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

ただし、最初のオプションでは、ノードアプリケーションはhttp_proxy変数(で定義されている/etc/bash.bashrc)を読み取ることができません。 2番目の設定ファイルは読み取れません(その/optフォルダにノードアプリケーションがインストールされています)。

答え1

/etc/bash.bashrc対話型シェルの起動時に読み込まれます。ここでは、完了設定、プロンプトなどのインタラクティブな使用のための設定があります。そこに環境変数を設定しないでください。バラよりすべてのシェルが読める「.bashrc」に対応するファイルはありますか?システム全体の環境変数に最適な場所は次のとおりです。/etc/environment/etc/profile(とのファイル/etc/profile.d)。

ノーマルUpstartの環境変数の設定方法作業ファイル自体にあります。 Upstartでは読み取れませんが、/etc/environmentジョブスクリプトのファイルから環境変数をロードできます。

script
. /etc/environment
exec start-stop-daemon …
end script

答え2

呼び出されていると思うようにだまされて、bash読み取りを/etc/bash.bashrc強制的に実行できます~/.bashrc(他の副作用は使用されません)。bash -issh

sudo -Hu someuser env SSH_CLIENT=1 SHLVL=0 \
  "NODE_PATH=$NODE_PATH" "FULL_PATH=$FULL_PATH" \
  "FILE_NAME=$FILE_NAME" "PROGRAM_NAME=$PROGRAM_NAME" bash -c '
  "$NODE_PATH" "$FULL_PATH/$FILE_NAME" >> "/var/log/$PROGRAM_NAME.sys.log" 2>&1'

sudo通常、環境はリセットされるため、これを行う必要があります。 (少なくとも場所については)設定したい-H(または-i設定-iファイルを読みます)HOME~/.bashrc

答え3

bashインタラクティブシェルで強制することができます。次のコマンドを試してください。

sudo -iu someuser /bin/bash -i -c '$NODE_PATH $FULL_PATH/$FILE_NAME \
>> /var/log/$PROGRAM_NAME.sys.log 2>&1'

これで、コマンドを実行する前に~/.bashrcソース/etc/bash.bashrcがありますbash。これは、端末を開くときと同じ動作です。

関連情報