[每周讨论专题]--第一期--Apache是这样启动的

王朝厨房·作者佚名  2007-01-05
宽屏版  字体: |||超大  

[b:fe5c1b8171][size=20:fe5c1b8171]每周讨论专题[/size:fe5c1b8171][/b:fe5c1b8171]【第一期】.......................................................点这里查看其他讨论专题

[b:fe5c1b8171][color=red:fe5c1b8171][size=24:fe5c1b8171]Apache是这样启动的[/size:fe5c1b8171][/color:fe5c1b8171][/b:fe5c1b8171]

[quote:fe5c1b8171]

本期讨论主旨为,Apache在不同操作系统下面的开机启动、启动过程中的问题等等

[/quote:fe5c1b8171]

Apache是怎样启动的

如果配置文件中Listen的定义为默认的80端口(或其他1024以下的端口),那么启动Apache将需要root权限以将它绑定在这个特权端口上。一旦服务器开始启动并完成了一些诸如打开日志文件之类的操作,它将创建很多子进程来完成一些诸如侦听和回应客户端请求的工作。httpd主进程仍然以root用户的权限运行,而它的子进程将以一个较低权限的用户运行。这将由你选择的多道处理模块进行控制。

启动httpd执行文件的推荐方法是使用apachectl控制脚本。 此脚本设置了在某些操作系统中正常运行httpd所必需的环境变量。 apachectl会传递命令行的所有参数, 因此所有httpd的选项多半也可以用于apachectl。 你可以直接修改apachectl脚本, 改变头部的HTTPD变量使之指向httpd文件的正确位置, 也可以设置任意命令行参数,使之总是有效。

httpd被调用后第一个要做的事情是找到并读取配置文件httpd.conf。此文件的位置是在编译时设定的,但也可以象下面这样在运行时用 -f 命令行可选项来指定:

/usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd.conf

如果启动时一切都很正常,服务器将与终端分离并几乎同时出现平时的命令行提示符。这代表着服务器已经启动并开始运行。然后你就可以用你的浏览器去连接你的服务器来查看DocumentRoot目录下的测试文档及其页面链接里的其它文档的本地拷贝。

启动时发生的错误

如果Apache在启动过程中产生了致命错误,它将在退出前把描述这个错误的信息显示在终端上或者写入到ErrorLog中。一个最常产生的错误信息是“Unable to bind to Port ...”。这个信息主要由以下原因造成:

想由一个特权端口启动服务但没有以root用户登录,或

启动服务时已经有另外的Apache实例在运行或其他的web服务器已经绑定了同样的端口。

更多问题的解决办法,请参见Apache的FAQ。

随系统启动

如果你希望你的服务器在系统重启后仍保持运行状态, 你应该把httpd或者apachectl的调用加入到你的系统启动文件中 (典型文件为rc.local或rc.N目录下的某一文件)。 这将会以root权限启动Apache。当然,在此之前, 你必须保证你的服务器已经完成了安全和访问权限的设定。

apachectl脚本被设计为可以用作SysV初始化脚本, 它接受start, restart, 和stop参数, 并把它们转译为httpd的对应信号, 所以通常都可以连接apachectl到适当的初始目录, 但是需要检查你的系统对此的精确要求。

我使用服务器多半是FreeBSD系统,所以在FreeBSD之中,要开机启动Apache,一般是在/usr/local/etc/rc.d/里面建立apache.sh脚本,内容如下:

[code:1:fe5c1b8171]

#!/bin/sh

###FileName=Apache.sh

###Author=HonestQiao

PREFIX=/usr/local/apache2

case "$1" in

start)

[ "ssl" = "ssl" -a -f "$PREFIX/etc/apache2/ssl.crt/server.crt" ] && SSL=ssl

[ -x ${PREFIX}/sbin/apachectl ] && ${PREFIX}/sbin/apachectl start${SSL} > /dev/null && echo -n ' apache2'

;;

stop)

[ -r /var/run/httpd.pid ] && ${PREFIX}/sbin/apachectl stop > /dev/null && echo -n ' apache2'

;;

*)

echo "Usage: `basename $0` {start|stop}" >&2

;;

esac

exit 0

[/code:1:fe5c1b8171]

当然,你也可以在rc.local里面设置Apache 的启动,在rc.local里面添加

[code:1:fe5c1b8171]

###Apache

/usr/local/apache2/bin/apachectl start

[/code:1:fe5c1b8171]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有