Apache 2 - 在Windows上重新加载配置

9

我有一个PHP脚本可以修改httpd.conf文件,因此我需要自动重新加载它在Apache中。

在Linux上,有优雅重启(graceful restart),但在Windows上(我使用restart命令)会终止所有当前连接。在Windows上是否有像优雅重启一样的命令?是否有其他解决方法?

2个回答

21

是的,你应该使用-k开关。

   httpd.exe -k restart or apache.exe -k restart 

此外还有更多信息,http://www.zrinity.com/developers/apache/usage.cfm

编辑:

这不应该是 Graceful 的重点。请注意我使用了-k。这不同于正常的重启。它允许当前会话完成其任务,同时正在重新读取配置文件,这样它将立即开始接收新请求。

从文档中获取:

USR1或优雅信号导致父进程建议子进程在其当前请求之后退出(如果它们没有提供任何服务,则立即退出)。父进程重新读取其配置文件并重新打开其日志文件。当每个子进程死亡时,父进程将其替换为新一代配置的子进程,该子进程立即开始提供新请求。

http://httpd.apache.org/docs/2.2/stopping.html#graceful

它正在做你要求的事情。

编辑2:

添加此链接并提供两个可能的版本,因为有些人认为只有一种特定的方法可以做某件事,而不是自己搜索。

http://httpd.apache.org/docs/2.4/platform/windows.html#wincons

我认为我将删除此答案,因为要么人们无法阅读,要么如果某人无法使用它会收到不支持的投票。由不同开发者制作的不同版本的Windows。如果它不起作用,请寻找他们的答案。即使Linux也有不同的命令取决于发行版。天哪


1
我知道如何重启Apache,但是“重启”并没有帮助我太多。它仍然会关闭端口80和443上的当前连接,因此在此期间加载页面的用户将收到错误。 - Alin Florin
1
我之前在Apache 2.2.22上进行了测试。有时候(很少)它会导致页面加载过程冻结。但大多数情况下,它会终止连接并弹出浏览器的未知页面错误。想象一下当一些用户正在上传东西时发生这种情况。另一方面,在Linux上,它运行得非常好。 - Alin Florin
2
@DaveG 是的,它可以。我甚至提供了一个链接。一些版本使用 Apache.exe,一些使用 httpd.exe。如果你在命令提示符中这样做,你不需要在 Windows 中使用扩展名。那也是我提供链接的原因。而且这也是一个例子。无论操作系统如何,主要线索都是 -k 选项。你有没有仔细阅读?所以那是一个毫无根据的负评。 - Panama Jack
1
@Buster,这是有道理的。我写了“编辑”,因为我回答了第一条评论,如果你仔细阅读而不是愚蠢地对一个合法的答案进行负面评价,就会明白。如果你无法理解,请问一下?链接提供了额外的信息,这也是它的唯一目的。由于不同的项目编译了不同的版本,所以我列出了两个版本。 - Panama Jack
1
@Buster 显然,它帮助了其他12个投票者。答案在最顶部,其余的只是支持信息。不确定你具体在寻找什么。 - Panama Jack
显示剩余5条评论

2
在最新的Apache 2.4.20 VC10版本中,“httpd -k restart”命令实际上是一种平稳重启方式。它不会断开任何连接,例如,如果有人正在从您的服务器下载东西,它不会中断此过程。另一个证明是,“-k restart”将不会重置mod_status提供的服务器统计信息,即使它也不会更改“Restart Time”值。
尽管在Windows中可以使用“httpd -k graceful”和“httpd -k graceful-stop”命令,但是它们将无法工作,并显示“couldn't make a socket”的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接