web-dev-qa-db-ja.com

スクリプトを介して起動時にグローバル環境変数を設定し、ログイン前に実行するアプリケーションでそれらを使用できるようにする方法は?

起動時に実行されるサービスがあり、そのサービスでは、いくつかの環境変数をエクスポートするバックグラウンドでbashスクリプトを呼び出します。私が抱えている問題は、これらの環境変数がバックグラウンドプロセスの親に送信されないため、スクリプトの実行が完了するとすぐに消えてしまうことです。

さらに、スクリプトが実行された後、サービスは、私が持っているアプリケーションを起動する別のスクリプトを呼び出します。このアプリケーションは、これらの環境変数にアクセスする必要があります。

私がそれを実行するRHELシステムは、ユーザーがログインすることは決してないように意図されており、起動してアプリケーションを起動するだけです。親プロセス/シェルの環境変数は、子バックグラウンドプロセスシェルでは設定できません本当に

私のサービスにそれらを追加することではなく(それは私にとっても機能しませんでした)、それらを/etc/environmentに保存することではなく、私のサービス(必ずしもバックグラウンドではありません)によって呼び出されるスクリプトを通じてこれを行う方法が必要ですまたは.profileまたはそのような何か。

私のサービスでは、環境変数を追加してみました(ただし、私がやりたいことではありません)。

    export TEST=192.168.1.1

私のサービスでもこれを試しました:

    TEST=192.168.1.1
    export TEST=${TEST}

サービスがbashスクリプトを呼び出す方法を変更してみました。

    /bin/asdf/script &

同じシェルで実行されるようにスクリプトを調達することも試みました(これは this から取得したものです)。

    . ./bin/asdf/script
    #I'm very confused why this didn't work

私はまた this を見つけました。これは興味深いように見えましたが、私の場合、実際にはうまくいきませんでした。

17
sqenixs

/etc/profile.d/に変数を収集するスクリプトを入力してみることができます

例:

/etc/profile.d/somescript.sh

#!/bin/bash
TEST=$(cat /var/somefile)
export $TEST

/etc/profileは、/etc/profile.d/でスクリプトを実行する呼び出しを実行します。これは、ルートを含むシステム上のすべてのユーザーに適用されます。

13
madflojo

プロセスが別の既存のプロセスの環境に影響を与える方法はありません。プロセスは、子プロセスの環境にのみ影響します。

したがって、これらの環境変数を必要とするアプリケーションの祖先にこれらの環境変数を設定する必要があります。サービスで環境設定のbashスクリプトとアプリケーションを個別に呼び出すのではなく、環境変数を設定してアプリケーションを起動するbashスクリプトをサービスで呼び出します。

#!/bin/bash
. /path/to/environment/variable/setter.bash
exec /path/to/application