使用其他配置文件启动Apache失败,没有任何错误消息

时间:2013-01-10 15:07:56

标签: apache

出于测试目的,我想在本地运行Apache(最终作为非root用户)并将Apache配置文件保存在我的中央存储库中。根据Apache文档(http://httpd.apache.org/docs/2.2/configuring.html),我可以使用-f开关设置配置文件,使用-d开关设置ServerRoot(http://httpd.apache.org/docs/2.2/programs/httpd.html)。

现在我的问题是当我尝试使用

启动Apache时
sudo apache2 -d $(pwd)/testApacheRootDir/ -f $(pwd)/testApacheRootDir/testingApacheConf -k start

进程退出而不实际启动Apache(并且没有任何)错误消息。

我知道配置文件被读取,因为如果文件中有错误,上面的命令将打印错误消息。 Apache实际上也使用ServerRoot目录,因为error_log下创建了一个(空)$(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"

你有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我不知道为什么错误消息永远不会写入日志文件或控制台输出,但缺少的是User指令。添加后

User    www-data
Group   www-data

一切正常。

答案 1 :(得分:0)

在解析配置文件之后但在初始化日志记录之前,Apache偶尔会遇到错误。在这种情况下,错误消息将打印到stderr,但在您执行时启动Apache会隐藏进程的任何输出。尝试像这样运行它:

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

-X标志导致Apache在前台运行:

  

-X在调试模式下运行httpd。只启动一个工作程序,服务器不会从控制台分离。

这样可以让您看到打印到stderr的任何错误消息。

如果这不起作用,这是一个很大的锤子:

strace的控制下运行Apache,然后检查跟踪文件以查看是否可以发现问题。像这样启动Apache:

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

这会将系统调用跟踪写入名为trace的文件。对于包含错误消息的任何write系统调用或系统调用中的错误(例如,ENOENT,检查此文件(可能从底部开始),因为配置中指定的目录丢失或输入错误或某事)。

-f标记要求strace跟踪分叉,而-s 1024表示在write等调用中最多可记录1024个字符。