当我从源代码安装 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
}