upstartにサービスの/ etc / environmentから環境を読み取らせる


17

で定義された環境変数を提供するための最良の方法は何である/etc/environment成り上がりサービスは?

.スクリプトはすべての定義の前にsh追加する必要があるため、スクリプトセクションで実行するだけでは機能しないと思いexportます...

回答:


16

私はついに#upstartIRCチャンネルで答えを得ました。ある時点で、upstartは適切なPAMサポートを取得し、/etc/environmentそれ自体を読み取ります。それまでは、suでコマンドを実行するのがコツです。suPAMを使用し、適切な環境をセットアップします。例:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script

答えを投稿していただきありがとうございます、あなたはまったく同じ問題で私を助けてくれました。
マキシムVeksler

エラー:su: must be run from a terminal
Kuf

3

使用する傾向がある eval $(cat /etc/environment | sed 's/^/export /')

の各行を/etc/environmentprepends exportして評価します:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script

エクスポートをスクリプトブロックに直接配置するだけでなく、なぜexecを使用するのですか?
ガス

1

これをスクリプトに追加します。

. /etc/environment
export VAR1 VAR2 VAR3

ここで、必要な変数は「VAR1」スタイルのプレースホルダーの代わりに指定されます。


2
そのように、私は手動でupstart構成と/ etc / environmentの同期を維持する必要があります。これは(私の意見では)変数を2回定義するよりも良くありません
...-Nikratio

/etc/environment必要な変数をすべて定義するために使用するつもりはありません。静的ファイルのままにしておきます。私のシステムでは、とにかくそれを使用する少数のスクリプトしか見つかりませんでした。次のようなファイルを作成し、/etc/environment.local変数エクスポートをそこに入れて、そのファイルを入手ます。次に、その1つのファイルを維持するだけです。
追って通知があるまで一時停止します。

/ etc / environmentはpam_env.soによって読み取られ(スクリプトではなく)、すべてのログインで使用できます。残念ながら、upstartによって起動されたプログラムのみがdefaulhtによってそのファイルにアクセスできません。
-Nikratio
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.