Linuxでシステム全体の環境変数を再初期化する
-
02-07-2019 - |
質問
Apacheに事前定義された環境の一部を登録して、PHPのgetenv関数を使用して取得できるようにしたいだけです。これどうやってするの?rootを使用してexport FOO=/bar/bazで/etc/profile.d/foo.shを追加し、Apacheを再起動してみました。
解決
環境変数は Unix のプロセスによって継承されます。/etc/profile.d 内のファイルは、ログイン時にのみ (サブシェルではなく現在のシェルで) 実行されます。そこで値を変更してプロセスを再起動するだけでは、環境は更新されません。
考えられる修正:
- ログアウト/ログインしてからApacheを起動します
- ファイルをソースします:
# . /etc/profile.d/foo.sh
, 、次にApacheを再起動します - Apache initスクリプトでファイルをソースします
また、次のことを確認する必要があります。 /etc/profile.d/
Apache が起動されるときにソースされます。 init
自分自身ではなく。
最適な修正は、使用しているディストリビューションによっても異なる場合があります。これは、ディストリビューションによって構成スキームが異なるためです。
他のヒント
使用できます SetEnv 設定ファイル (/etc/httpd/conf.d/*.conf, .htaccess ...) 内。さらに、/etc/sysconfig/httpd (RPM ベースのディストリビューション上) でそれらを定義できる必要があります。 輸出 彼ら(注:未検証)。
注記:一部のディストリビューションが、システム構成に関する限り、Apache などの公的にアクセス可能なサービスから可能な限り隠蔽しようと懸命に努力したとしても、私は驚かないでしょう。そうでない場合は、将来のバージョンでこれを行うようになる可能性があります。したがって、これを明示的に行うことをお勧めします。Apache とシェルの間でそのような設定を共有する必要がある場合は、ソースを試してみてください。 /etc/profile.d/yourprofile.sh から /etc/sysconfig/httpd
Apache 構成ファイルを使用すると、サイトごとに環境変数を設定できます。
したがって、Web サーバーが 2 つの論理サイトからページを提供している場合、同じ環境変数をサイトごとに異なるように設定することができ、その結果、PHP が異なる反応を示すようになります。
を参照してください。 Apache mod_env 詳細については:
Apache のみの環境変数が必要な場合、私にとってうまくいったのは、 /etc/apache2/envvars
そしてApacheを再起動します。次の設定を追加しました。
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'