我从源代码安装 apache 时遇到了这个问题,但后来尝试运行
$ sudo /etc/init.d/httpd restart
它使用的是 apache 的预装版本。 /etc/init.d/httpd 中的 stop 指令没有删除在启动源安装版本的 apache 时创建的 httpd.pid 文件。
要确定这是否也是您的问题的原因,请在运行时查找 httpd.pid 文件的设置位置
$ sudo apachectl start
如果您从源代码安装并且 apache2 位于 /usr/local/apache2 中,则应该在 /usr/local/apache2/logs 中创建 httpd.pid 文件。当你通过运行停止 apache 时
$ sudo apachectl stop
这个文件应该被删除。因此,要测试 httpd.pid 文件是否导致您的问题,请通过调用来启动 apache
$ sudo apachectl start
并找到 httpd.pid 文件。然后尝试使用停止 apache
$ sudo /etc/init.d/httpd stop
如果原来的httpd.pid文件还在,那就是你使用时apache无法启动的原因
$ sudo /etc/init.d/httpd start
为了让我的 /etc/init.d/httpd 文件正常工作,我在启动和停止方法中明确调用了 apachectl:
#!/bin/bash
# /etc/init.d/httpd
#
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache2/bin/apachectl
httpd=/usr/local/apache2/bin/httpd
pid=/usr/local/apache2/logs/httpd.pid
prog=httpd
RETVAL=0
start() {
echo -n $"Starting $prog: "
$apachectl -k start
RETVAL=$?
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
$apachectl -k stop
RETVAL=$?
echo
}