0

テスト目的で、Apache をローカルで (最終的には root 以外のユーザーとして) 実行し、Apache 構成ファイルを中央リポジトリに保持したいと考えています。Apache のドキュメント ( http://httpd.apache.org/docs/2.2/configuring.html ) によると、スイッチを使用して構成ファイルを設定し、-fスイッチを使用して ServerRoot を設定できます-d( http://httpd.apache.org/ docs/2.2/programs/httpd.html )。

今私の問題は、Apacheを起動しようとすると

sudo apache2 -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf -k start

プロセスは、実際に Apache を起動せずに (エラー メッセージも表示せずに) 終了します。

ファイルにエラーがある場合、上記のコマンドはエラーメッセージを出力するため、構成ファイルが読み取られることはわかっています。error_log(空の)ファイルが の下に作成されるため、Apacheは実際にはServerRootディレクトリも使用します$(pwd)/testApacheRootDir/logs/

私の Apache 設定ファイルは次のようになります。

Listen 80

NameVirtualHost localhost:80

<VirtualHost localhost:80>
DocumentRoot /var/www/cms
ServerName cms.testing
</VirtualHost>

<VirtualHost localhost:80>
DocumentRoot /var/www/vendor
ServerName vendor.testing
</VirtualHost>

apache2 -V印刷:

Server version: Apache/2.2.22 (Ubuntu)
Server built:   Nov  6 2012 20:27:25
Server's Module Magic Number: 20051115:30
Server loaded:  APR 1.4.6, APR-Util 1.4.1
Compiled using: APR 1.4.6, APR-Util 1.4.1
Architecture:   64-bit
Server MPM:     Worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/worker"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

何が間違っているのかアドバイスはありますか?

4

2 に答える 2

1

エラー メッセージがログ ファイルやコンソール出力に書き込まれない理由はわかりませんが、欠けていたのは User ディレクティブでした。追加後

User    www-data
Group   www-data

すべて正常に動作します。

于 2013-01-14T08:31:49.440 に答える
1

設定ファイルの解析後、ロギングが初期化される前に、Apache でエラーが発生することがあります。この場合、エラー メッセージは にstderr出力されますが、実行中に Apache を起動すると、プロセスからの出力が隠されます。次のように実行してみてください。

apache2 -X -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf

この-Xフラグにより​​、Apache がフォアグラウンドで実行されます。

-X デ​​バッグ モードで httpd を実行します。1 つのワーカーのみが開始され、サーバーはコンソールから切り離されません。

これにより、 に出力されたエラー メッセージを確認できるようになりますstderr

それがうまくいかない場合、ここに大きなハンマーがあります:

の制御下で Apache を実行しstrace、トレース ファイルを調べて、問題を特定できるかどうかを確認します。次のように Apache を起動します。

strace -o trace -f -s 1024 apache2 -X -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf

これにより、システム コール トレースが という名前のファイルに書き込まれtraceます。writeエラー メッセージを含むシステム コールがないか、またはシステム コールのエラーがないか (たとえば、ENOENT構成で指定されたディレクトリが見つからないか、タイプミスなどの理由で)、このファイルを (おそらく一番下から)調べます。

-fフラグはフォークstraceに従うように要求し、 など-s 1024への呼び出しで最大 1024 文字を記録することを意味します。write

于 2013-01-10T15:45:14.897 に答える