原文地址:http://hi.baidu.com/whyang2006/blog/item/98807e8258bcf899f703a604.html
本文档叙述了在类Unix系统上如何停止和重启Apache 。 Windows NT/2000/XP/2003的用户请参见以服务方式运行Apache ,Windows 9x/ME用户则参见在控制台中运行Apache 。
为了停止或者重新启动Apache ,你必须向正在运行的httpd
进程发送信号。有两种发送信号的方法。第一种方法是直接使用UNIX的kill
命令向运行中的进程发送信号。你也许你会注意到你的系统里运行着很多httpd
进程。但你不应该直接对它们中的任何一个发送信号,而只要对已经在PidFile
中记载下了自身PID的父进程发送信号。也就是说,你不必对父进程以外的任何进程发送信号。你可以向父进程发送三种信号:TERM
、HUP
、USR1
,我们过一会儿再进行详细的说明。
你可以用下面这样的命令来向父进程发送信号:
kill -TERM `cat /usr/local/apache2/logs/httpd.pid`
第二种方法是使用下面将要描述的httpd
二进制可执行文件的 -k
命令行选项:stop
、restart
、graceful
、graceful-stop
。不过我们推荐你使用apachectl
控制脚本来向httpd
二进制可执行文件传递这些选项。
当你向httpd
发送信号后,你可以这样来读取它的进行过程:
tail -f /usr/local/apache2/logs/error_log
你可以修改这些示例以适应你的ServerRoot
和PidFile
设置。
信号:TERM
apachectl -k stop
发送TERM
或stop
信号到父进程可以使它立刻杀死所有子进程。这将花费一些时间来杀死所有子进程。然后父进程自己也退出。所有进行中的请求将被强行中止,而且不再接受其它请求。
信号:USR1
apachectl -k graceful
USR1
或graceful
信号使得父进程建议子进程在完成它们现在的请求后退出(如果他们没有进行服务,将会立刻退出)。父进程重新读入配置文件并重新打开日志文件。每当一个子进程死掉,父进程立刻用新的配置文件产生一个新的子进程并立刻开始伺服新的请求。
重启代码的设计能够确保MPM进程控制指令的正常运作,也就是在重启过程中确保有适当数量的进程和线程以响应客户端的请求。它是这样StartServers
的:如果在一秒钟以后还没有新创建StartServers
个子进程,则创建出足够完成现在任务的子进程个数。因此,代码除了保有能够维持服务器的现有负载数量的子进程外,也确保StartServers
按你的意愿运作。
使用mod_status
的用户会注意到在USR1
信号发出后,服务器的统计信息没有被清零。代码被写成既能将你服务器无法伺服新请求的时间降至最少(这些请求将被操作系统放到队列里,使得它们不会丢失),又能遵从你的参数优化。为了做到这一点,它将在重新生成子进程的过程中,在scoreboard上保存所有子进程的状态。
mod_status
还会将那些在优雅重启前就已经开始而没有结束伺服请求的子进程用一个"G
"来标志。
目前,日志滚动脚本还无法使用USR1
来确定所有写入预重启日志的子进程都已结束。我们建议你在发出了USR1
信号后等待一个适当的时间,然后再对旧的日志做处理。比如说如果对于一个窄带用户来说,大部分的点击处理将在10分钟之内完成,那么你应该在处理旧的日志前等待15分钟。
如 果Apache重启时发现配置文件有误,那么父进程将不会重启,而是报错并退出。在优雅重启的情况下,它将在处理中的子进程存在的情况下维持它的存在(就 是那些被要求在处理完它们的请求后"优雅退出"的子进程)。如果你要重启服务器,这将导致一些问题:它将不能绑定到它的监听端口。在执行重启之前,你可以 用
-t
命令行参数来检查配置文件语法的正确性(参见
httpd
)。但这仍然不能保证服务器一定可以正确的重启。为了从语法和语义两方面检查配置文件,你可以用一个非root用户来启动
httpd
。如果没有错误,它将尝试去打开套接字和日志文件,继而因没有root权限而失败(或是因为现在运行的
httpd
已经绑定了这些端口)。如果是因为其他原因那么就可能是一个配置文件产生的错误,你就应当在进行优雅重启之前改正这个错误。
信号:HUP
apachectl -k restart
向父进程发送HUP
或restart
信号会使它象收到TERM
信号一样杀掉所有的子进程,不同之处在于父进程本身并不退出。它重新读入配置文件、重新打开日志文件。然后产生一系列新的子进程来继续服务。
使用mod_status
的用户会注意到在HUP
信号发出后,服务器统计信息会被清零。
如果你重启时配置文件有误,那么父进程将不会重启,而是报错并退出。参见上文中避免的方法。
信号:WINCH
apachectl -k graceful-stop
WINCH
或graceful-stop
信号使得父进程建议子进程在完成它们现在的请求后退出(如果他们没有进行服务,将会立刻退出)。然后父进程删除PidFile
并停止在所有端口上的监听。父进程仍然继续运行并监视正在处理请求的子进程,一旦所有子进程完成任务并退出或者超过由GracefulShutdownTimeout
指令规定的时间,父进程将会退出。在超时的情况下,所有子进程都将接收到TERM
信号并被强制退出。
在"优雅"状态下,TERM
信号将会立即中止父进程和所有子进程。由于PidFile
已经被删除,你将无法使用apachectl
或httpd
发送该信号。
graceful-stop
允许你同时运行多个相同配置的httpd
实例。这在对Apache进行平滑升级的时候是一个非常有用的特性。不过它在某些配置的情况下同样可能会导致死锁和竞争条件。
必须注意确保诸如Lockfile
和ScriptSock
之类的磁盘文件包含服务器的PID ,并且能够安全的共存。然而如果一个配置指令、第三方模块或持久CGI使用任何磁盘锁或状态文件,必须注意确保多个httpd
运行实例之间不会争抢文件。
你还必须防止潜在的竞争条件,比如使用rotatelogs
风格的管道日志。运行中的多个rotatelogs
实例企图同时滚动同一个日志文件可能会导致互相破坏对方的日志文件。
在Apache 1.2b9 之前,有很多关于重启和死亡信号的竞争条件。关 于竞争条件的一个简单描述是:一个时间敏感的问题,如果一些事情在不适当的时间或以不恰当的顺序发生,它将作出你不期望的反应;如果同样的事情在恰当的时 间发生,则不会出现异常。凭借那些拥有"正确"特性设置的体系结构,我们尽量避免了它们的出现。但值得注意的是,仍然有一些竞争条件存在于这样的体系结构 中。
使用物理磁盘的ScoreBoardFile
就有损坏ScoreBoard的潜在危险。这将发生在"bind: Address already in use"(HUP
之后)或"long lost child came home!"(USR1
之后)时。前者是一个致命错误,而后者则会使服务器丢失ScoreBoard的一个记录。所以我们建议多使用优雅重启,偶尔使用硬重启。这些问题很难解决,但幸运的是大多数结构并不需要ScoreBoard文件。而如果你需要这样的结构,你可以参考ScoreBoardFile
文档。
当 每个子进程在一个HTTP的持续连接(KeepAlive)中涉及到第二个并发的请求时,所有的结构都会或多或少存在竞争状态的问题。它将在读取了请求而 没有读取任何请求头之后立刻退出。这个修复对于1.2来说来得太晚了。但因为持续连接的客户端已经考虑到网络延时和服务器超时会造成类似的情况,所以理论 上说,这不是一个太大的问题。而实际上似乎也没有任何影响:在一个测试案例中服务器在一秒之内被重启了20次,而客户端却成功的浏览了网站,而且没有任何 破损的图片或空文档。
分享到:
相关推荐
Linux 下 Apache+PHP+Mysql 安装与配置 ...总结,文章介绍了 Linux 下 Apache+PHP+Mysql 的安装和配置过程,包括 Apache 的安装和配置、MySQL 的安装和配置,并且对安装过程中的注意事项进行了说明。
apache停止命令 /usr/local/apache2/bin/apachectl stop 停止 apache重新启动命令: /usr/local/apache2/bin/apachectl restart 重启 要在重启 Apache 服务器时不中断当前的连接,则应运行: /usr/local/sbin...
Linux下重启Apache的方法 Linux系统中的Apache服务器是大多数Web应用程序的核心组件。为了确保服务器的稳定运行,需要掌握Apache服务器的启动、重启和停止方法。本文将详细介绍Linux系统下Apache服务器的启动、重启...
以下是对"Linux整合Apache和SVN"这一主题的详细讲解。 首先,了解SVN的基本概念。Subversion是一个集中式的版本控制系统,它记录了文件和目录的修改历史,使得团队成员可以协同工作,同时保持对代码历史的跟踪。...
Linux 下安装 APACHE Linux 作为一个开源的操作系统,广泛应用于服务器端,APACHE 是一个流行的 Web 服务器软件,而安装 APACHE 在 Linux 下则需要遵循特定的步骤,以避免安装过程中的错误。 下载必要的文件 在...
以上就是Apache在Linux环境下的安装和基础配置过程。这个过程中,你可能需要对Linux系统管理、网络服务和HTTP协议有一定的理解。如果你在安装过程中遇到任何问题,可以查阅Apache官方文档或在线社区寻求帮助。记住,...
在Linux系统中,构建一个基于Apache、PHP和MySQL的服务器环境,通常被称为LAMP(Linux、Apache、MySQL、PHP)架构。这是一种常见的Web开发平台,适用于动态网站和应用程序的部署。下面将详细介绍如何在Linux环境下...
红帽子4.0的linux-apache,ftp架设
### Linux下Apache安装详解 在Linux环境中安装Apache服务器是一项基础且关键的任务,尤其对于搭建Web服务、测试环境或运行各种基于Web的应用程序至关重要。本文将深入解析Linux环境下Apache的安装流程,涵盖解压缩...
Linux下Apache配置详解 学习必备
Linux下Apache服务器的配置及安全问题 Linux 作为一个开放源代码的操作系统,广泛应用于服务器领域,而 Apache 服务器则是最流行的 Web 服务器之一。在 Linux 平台上配置 Apache 服务器是许多开发者和管理员的必修...
Linux+Apache+Tomcat 的整合是目前最常用的 web 服务器架构之一,本文档将详细介绍如何在 Red Hat Enterprise Linux 5.2 环境下安装和配置 Apache2.2.12、Tomcat6.0.20 和 JDK6u16,以实现一个完整的 JSP 环境。...
总结,Linux环境下的Apache Tomcat 5.5.28安装和配置涉及多个步骤,包括环境准备、下载解压、配置环境变量、启动和停止服务、验证安装以及部署Web应用。通过这些操作,你可以在Linux服务器上搭建一个高效稳定的Java ...
在Linux环境下配置和使用Apache ActiveMQ对于许多企业和开发者来说是至关重要的,因为Linux提供了稳定且安全的基础来运行这样的消息代理。下面我们将深入探讨如何在Linux系统中安装、配置和管理Apache ActiveMQ。 ...
在Linux环境中,Apache和PHP的集成是搭建动态网站服务的关键步骤。Apache是一个广泛使用的开源Web服务器,而PHP是一种流行的服务器端...通过以上步骤和注意事项,你应该能够成功地在Linux环境下安装和整合Apache与PHP。
在Linux环境下配置Apache...通过以上步骤,可以在Linux下成功配置Apache虚拟主机,使得一台服务器能够高效地托管多个独立网站,每个网站都有其独立的配置和资源,这对于提高服务器利用率和网站管理效率具有重要意义。
Linux 下 Apache 服务器的搭建 Linux 操作系统是目前最流行的操作系统之一,Apache 是其中最流行的 Web 服务器软件之一。本文详细介绍了在 RedHat 9.0 操作系统中利用 Apache 软件搭建 Web 服务器的方法,包括 ...
Linux 系统、Tomcat、重启、shell 脚本这些标签都是与本文相关的关键词,涵盖了 Linux 操作系统、Apache Tomcat 服务器、重启机制和 shell 脚本编程等多个方面的知识点。 部分内容解释 本文提供的 shell 脚本用于...
Linux 下安装 Apache 是一个复杂的过程,需要安装多个依赖项,包括 APR、APR-UTIL 和 PCRE。在本文中,我们将详细介绍 Linux 下安装 Apache 遇到的问题,以及解决办法。 一、安装前准备 在安装 Apache 之前,需要...