2012-03-22 6 views
2

私はPythonスクリプトをApache 2.2でCGIとして実行しています。これらのスクリプトは、私の.bashrcに設定された環境変数に依存して正しく動作します。 .bashrcは決して読み込まれず、スクリプトは失敗します。Apache httpdはロードされません.bashrc

私はたくさんのSETENVコマンドを使ってbashrcを複製したくありません。設定ファイルが簡単に同期しなくなり、見つけにくいバグが発生します。

私は自分のユーザーとしてrootではなくApacheを実行しています。私は手動で起動/停止しているので、/etc/init.dスクリプトは全く問題にならないはずです(私は思う)。

これらの制約がある場合、CGIが呼び出されたときに.bashrcをロードするにはどうすればよいですか?

編集:私は/ usr/sbin/apache2ctlを使って再起動します。

答えて

0

何ですか?確かに、あなたのスクリプトがアカウントの個人ホームディレクトリの設定に依存しているとは限りません。

Apacheの設定ファイルなど、CGIスクリプトに環境変数をエクスポートすることができ

たぶん、あなたのプログラムがあまりにも多くの環境変数に依存しすぎています。構成ファイルのサポートはどうですか:/etc/mypythonprogram.rc柔軟性のために、別の設定ファイルを使用するようにプログラムに指示する単一の環境変数があります。

+1

説明やリンクが役に立つかもしれませんここでは後者です:。http://stackoverflow.com/questions/2941136/php-and-apache-environment-variablesそれはタグ付けされたPHPのが、私は原則が適用されると思います。それでも、これはOPは彼が彼の不安を和らげるために。たぶん、説明をしたくないと言った何ですか? – Wilduck

+0

@K az:私は通常、コマンドラインから使用するスクリプトをたくさん持っており、そのうちのいくつかのためにプライベートWebインターフェイスを作っています。これらのコマンドラインツールは環境変数に依存します - これは交渉可能ではありません。 – Jonathan

+0

@Wilduck:実際、そのリンクが役立ちます。 PassEnvは理想的ではありませんが、まともなソリューションです。環境変数の値は変わりませんが、環境変数のセットは頻繁に変更されません。 Apacheに外部環境からの値を使用するように指示すると、新しいパラメータを追加するときではなく、値を変更するときに問題を回避することができます。 – Jonathan

0

なぜ手動で起動/停止しますか? initスクリプトを使用すると便利です。 httpd.confファイルでhttpdプロセスを実行するユーザー名を指定することができます。また、環境設定も指定できます。 RedHat/CentOSの場合、これは次のようになります:

環境設定を/ etc/sysconfig/httpdファイルに追加します(あるいは、これらの環境変数を別のファイルから読み込み、同じように設定するコマンドを設定することもできます必要に応じて.bashrcのコマンド - 必要な環境設定を含むファイルが1つだけです)。

/etc/httpd/conf/httpd.confファイルを変更して、httpdプロセスを実行するユーザーがroot以外のユーザー(デフォルトではRedHat/CentOSのApacheである必要があります)になります。

これが完了したら、/etc/init.d/httpdを使用してプロセスを開始して停止してください。良い状態になっているはずです。

は、ポスターのコメントに反応して更新:

あなたのbashrcにから読みたい...と/usr/init.d/httpdの再起動を使用しない(それはapache2ctlと同じくらい簡単です)...これを行う方法については、環境変数を新しいファイルに入れてください。以下の例では、 "/ etc/httpd/envconfig"というファイルを使用していると仮定します。 [-f/etc/httpd/envconfig]の場合、これらの行をbashrcと/ etc/sysconfig/httpd:

に追加します。 。/etc/httpd/envconfig fi

ここで、bashとhttpdスクリプトの両方が、更新された環境変数で機能するはずです。

1つの追加のノートは、CGI環境変数は、あなたがこのURLをチェックアウトすることができますApacheの中に異なる方法で処理してしまうことがあります。特に

http://httpd.apache.org/docs/2.2/env.html

、」...また、PassEnvディレクティブを使用してサーバを起動したシェルの環境から変数を渡すこともできます... "

httpd.confファイルに適切な" PassEnv "ディレクティブを置く必要があります。あなたはCGIスクリプトに渡したい環境変数。良いニュースは、あなたが値を指定する必要はありませんということですので、限り、あなたは変数自身の名前を変更しないように、あなたが管理する必要はありません。二つの構成

+0

私はそれをデバッグしているので、手動で起動/停止しています:)。私がhttpd.confを変更するたびに、私はそれを再起動します(私は/ usr/sbin/apache2ctlを使用します)。 「別のファイルからこれらの環境変数を読み取るためのコマンドを設定する」 - 私は実際にすでにこの他のファイルを持っている、と私は私の.bashrcからそれを読んで。これはどうすればいいですか? – Jonathan

関連する問題