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

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

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

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

私が実行しているRHELシステムは、ユーザーがログインしたことがなく、起動してアプリケーションを実行するだけです。親プロセス/シェルの環境変数は使用できないことがわかります。本物ただし、サブバックグラウンドプロセスシェルで設定できます。

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

私のサービスで環境変数を追加してみました(しかしそれは私が望むものではありません)。

    export TEST=192.168.1.1

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

    TEST=192.168.1.1
    export TEST=${TEST}

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

    /bin/asdf/script &

また、同じシェルで実行するスクリプトをインポートしようとしました。これ):

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

私も見つけました。これこれは面白かったですが、私の場合は実際には動作しませんでした。

答え1

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

例:

/etc/profile.d/somescript.sh

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

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

答え2

プロセスは、他の既存のプロセスの環境に影響を与えることはできません。プロセスは子プロセスの環境にのみ影響します。

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

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

関連情報