如果在配置文件中配置的监听端口是80(或是其他低于1024)的端口,就须要拥有root权限去启动apache,这样可以使它绑定到这个特权端口。 一旦服务器启动并完成一些基本的工作,如开启日志文件,它就会启动几个子进程,这些子进程的工作是负责监听和响应客户的请求。 主http进程继续以root身份运行,但是子进程是以低级别权限用户运行的。这是由指定的Multi-Procesing Module控制的。
如果apache在启动时遇到致命的问题,它会在推出之前向控制台或者日志文件写消息去描述这个问题。 最常见的错误信息之一是“Unable to bind to port”(不能绑定到端口),这个问题可能是由以下的两种原因之一: ·试图去启动在一个特权端口上server,但不是以一个root用户身份登录的 ·端口被另一个apache实例或者其他的web server绑定
如果想在启动时就运行server,需要将apachectl添加到系统的启动文件中(典型的如rc.local文件或者在rc.N文件夹中),这样将会以root运行apache。 为了停止或者重启Apache,需要向正在运行的httpd进程发送一个信号。有两种方式可以发送信号。其一是使用unix的kill命令直接向进程发送信号。 你可能注意到有很多httpd可执行进程运行在系统上,但是不需要向每一个进程都发送一个信号,只有向父线程发送信号就可以了。 有四种信号可以向父进程发送:TERM,USR1,HUP和WINCH,下面将会花一些时间来描述一下:
使用下面的命令向父进程发送信号: kill -TERM `cat /usr/local/apache2/logs/httpd.pid` 第二种向httpd发送信号的方法是使用-k命令行选项:stop,restart,graceful和graceful -stop. 这些参数是针对httpd二进制的,推荐使用apachectl脚本,将会把这些参数传递到httpd。
向httpd发送信号后,可以使用如下的命令 查看进度: tail -f /usr/local/apache2/logs/error_log 可以对命令的后半部分修改下让其和自己的机器上的ServerRoot和PidFile设置相匹配。
现在停止(Stop Now): signal:TERM apachectl -k stop 发送TERM或stop信号到父进程,这样会试图杀死所有的子进程,父进程存在直到子进程全部杀死,当前请求终止,不再响应请求。
优雅地重启(Graceful Restart) Signal:USR1 apachectl -k graceful 发送USR1或graceful信号到到父进程,去建议子进程在当前的请求结束后退出(没有任何请求的话直接退出), 但是父进程并不退出,它重新读取配置文件,重新打开日志文件。
立即重启(Restart Now) Signal:HUP apachectl -k restart 发送HUP或restart信号到到父进程去杀死子进程(就像TERM),但是父进程并不退出,它重新读取配置文件,重新打开日志文件。
优雅的关闭(Graceful Stop) Signal:WINCH apachectl -k graceful-stop 发送WINCH或graceful-stop信号到到父进程,去建议子进程在当前的请求结束后退出,子进程退出后,父进程也退出。