bashrc
upstartスクリプトで変数をロードして実行する方法(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 -i
ssh
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
。これは、端末を開くときと同じ動作です。