質問: apache2がenvvarsファイルを尊重しないのはなぜですか? 私のenvvarファイルには、次の行が含まれています。export apache_run_user=www-data export apache_run_group=www-data 私のapache2.confには次の行があります:# these need to be set in /etc/apache2/envvars user ${apache_run_user} group ${apache_run_group} しかし、apache2 -mを実行すると、次のようになります:apache2: bad user name ${apache_run_user} 一時的な修正は、apache2.confファイルにwww-dataをハードコードすることです。いくつかの推測がありました ここ これは、いくつかの設定スクリプトが私のapache2.confファイルのenv変数を正しく置き換えなかったためであるというものです。関係なくapache2にenvvarsファイルを参照させるにはどうすればよいですか?別のデータポイントとして このサイト はビルド時にenvvarsが生成されていることを示しているようですが、実行時にapache2ctlによって読み取られ、このファイルはビルドプロセスによって残されただけではないことが示唆されます。
回答: http://httpd.apache.org/docs/2.2/configuring.html から: シェル環境変数の値は、構文$ {envvar}を使用して構成ファイルの行で使用できます。 「envvar」が有効な環境変数の名前である場合、その変数の値は構成ファイルの行のそのスポットに置き換えられ、そのテキストが構成ファイルで直接見つかったかのように処理が続行されます。 (envvar変数が見つからない場合、文字「$ {envvar}」は変更されずに残り、構成ファイル処理の後の段階で使用されます。) したがって、変数は期待どおりに環境から実際に取得されます。さて、これはどこで起こりますか?/etc/init.d/apache2では、apache_envvarsが、initscriptパスに基づくenvvarsファイルのパスに設定されます。通常、apache_envvars=/etc/apache2/envvarsが設定されます。現在、この値はapache2ctlで設定されているデフォルト値と等しいため、エクスポートされません。/usr/sbin/apache2ctlから:# the path to the environment variable file test -z "$apache_envvars" && apache_envvars="$apache_confdir/envvars" # pick up any necessary environment variables if test -f $apache_envvars; then . $apache_envvars fi 説明:apache_envvarsが空の場合、/etc/apache2/envvarsであるデフォルトパスを使用します。このファイルが存在する場合、それを「ソース」にします(現在の環境でそのファイルからコマンドを実行します)。envvarsファイルに構文エラーが含まれていないことを確認してください。このようなチェックを実行するには、次を使用します。sh -n /etc/apache2/envvars && echo syntax ok || echo fail エラーがある場合は出力されます。