Windows Server上的Apache 2.2:尝试更改所有数据和日志的盘符后将不会启动

我将Windows Server 2008上运行的Web服务器作为64位虚拟主机进行pipe理。 所有服务软件都是独立运行的,而不是作为AMP堆栈的一部分。 数据驱动器几乎已经满了,我的系统pipe理员已经configuration了一个新的虚拟驱动器,有更多的空间。 我的任务是将一切从旧卷复制到新卷。

在创build卷时,我确保它是使用相同的卷types,文件系统,块大小等创build的。我停止了所有相关的服务(Apache,MySQL,它们都从C 运行 ,但其数据全部位于D :,包括日志),并复制所有的文件。

从这里,我尝试了两种不同的方法来使服务取决于新的数量,而忘记旧的。 MySQL没有任何问题,但Apache无法使用任何一种方法作为服务启动。 以下是系统事件日志中显示的内容:

Apache2.2服务终止服务特定的错误错误的function

没有任何内容出现在error.log

首先,我试着简单地改变盘符。 我拿了旧的D:并把它改成了任意的东西,并把D:分配给新的音量。 这产生了上面的错误。 我尝试用新的驱动器名称重新启动服务器,“以防万一”,但发生了同样的错误。 因为我没有完全理解Windows挂载点,所以我将驱动器号改回原来的状态,并确认Apache服务启动正常。

其次,我尝试更新所有的Apache和MySQLconfiguration文件。 每一次出现“D:”(不区分大小写)都改为F :(新的盘符)。 我知道configuration文件,所以我知道我发现每一个事件。 上面的错误再次发生,完全一样的方式。 为了让Web服务器备份并运行,我恢复了所有的更改,并成功启动了服务。

我收集的更多信息:

  • httpd.exe在从命令行启动时作为服务运行成功。 没有语法错误。
  • 即使从命令行运行,Apache也不会作为服务启动( httpd.exe -k runservice )。
  • 该问题可能不是文件访问权限之一。 我仔细检查了关键位置(几个目录,日志文件),权限是相同的。 不过,我没有详尽的testing。

我还没有testing过的一件事是尝试只移动其中一个数据和日志位置到新的驱动器,而留下另一个。 我不认为这可能会有所作为。

这就是说,我实际上并不知道这里发生了什么。 我想不出为什么Apache只能通过改变日志文件和数据的位置来作为服务运行。

我非常感谢在这个问题上的任何build议或build议。 我很乐意进一步调查回应的build议。 如果你们中的任何人认为值得尝试只移动其中一个项目(日志或数据),我会尝试。 同样,如果你们中的任何一个人认为我太贴切的折扣权限,我会做一个更彻底的考试。

任何和所有的input是欢迎的! 我用尽了所有的想法。

第二天,在禁用服务器主要function的分配时间段内,我去尝试一些新的东西,并有一个新的想法,最终解决了这个问题! 细节如下,在我采取的步骤的上下文中。

我从最初的问题开始重复第二种方法。 我停止了服务,重新复制所有文件(在最后一天捕获修改),并编辑Apache和MySQLconfiguration文件以指向新驱动器(F :)。 我确认Apache正在产生同样的错误。 因为我已经打开了configuration文件,所以我决定尝试一下我最初没有尝试过的(真的应该有):

  • 我重置configuration文件,以便他们回到原来的状态,指向旧的驱动器(D :)。
  • 我只更新了对新驱动器(F :)的日志文件的引用,并testing了Apache服务 – 和以前一样。
  • 我将日志文件引用返回给D:并将数据引用更新为F: – IT WORKED! 再次,我真的应该昨天试过这个。 我从这一步学到的是,这是日志文件是问题所在。
  • 由于只有两个文件( access.logerror.log ),所以我强制进行权限更改:只读添加/删除(以防万一),确保apache用户通过目录和文件本身recursion写访问。
  • 更新了对F的日志文件引用: – 与以前一样的错误。
  • 在预感上,我重命名了两个日志文件(一种用于轮转日志文件的常用技术),并试图启动该服务,期望原始文件名的新版本将出现 – 他们做到了! 服务启动成功! 胜利!!

我所学到的:其实我并不完全确定。 如果我对调查的各个步骤没有这么彻底,我会怀疑有问题的文件句柄或什么的,但是我看不到在重新启动后怎么可能。 但是,我已经确认了在解决问题的同时不能太快解除可能性的价值。 正如我在问题中提到的,我不认为今天的调查方式可能会有所作为,我仍然不知道为什么这样做! 但是你不能与结果争论。

结论:我的问题已经解决,但我不知道为什么。 如果有人有理论,请分享!

我不知道为什么更改驱动器号导致问题。 但是,错误The service terminated with service-specific error Incorrect function的错误The service terminated with service-specific error Incorrect function Windows服务中的The service terminated with service-specific error Incorrect function通常是由于物理RAM短缺造成的。

检查Apache文档的最低系统要求,如果需要,请尝试closures不必要的程序。

我刚刚遇到与使用WSGIPythonHome mod_wsgi相同的问题。 从nmjk的回答中,我决定检查权限,并意识到Apache用户对WSGIPythonHome目录没有权限。 添加适当的权限后,Apache正常启动。

也许值得仔细检查configuration中指定的所有path的权限,并逐行注释掉任何包含path的configuration,以找出导致问题的path。

我的问题是相同的,我已经把日志文件夹移动到一个新的驱动器。 我遵循了关于重命名error.log文件的指示,并尝试启动Apache,但是失败时出现了同样的错误。 所以我重启了我的Windows 10机器,Apache成功启动了。