Windows Server 上的 Apache 2.2:尝试更改所有数据和日志的驱动器号后无法启动

nmj*_*mjk 7 windows-server-2008 windows-service apache-2.2

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

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

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

Apache2.2 服务因特定于服务的错误而终止 功能不正确

中什么都没有出现error.log

首先,我尝试简单地更改驱动器号。我把旧的 D: 改为任意的东西,并将 D: 分配给新卷。这产生了上面的错误。我尝试使用新的驱动器名称重新启动服务器,“以防万一”,但发生了同样的错误。因为对windows挂载点不是很了解,所以把盘符改回原来的样子,确认Apache服务启动正常。

其次,我尝试简单地更新所有 Apache 和 MySQL 配置文件。每次出现的“D:”(不区分大小写)都更改为 F:(新驱动器号)。我很了解配置文件,所以我知道我发现了每一个事件。上面的错误又出现了,方法一模一样。为了让 Web 服务器重新启动并运行,我恢复了所有更改,并且服务成功启动。

我收集的更多信息:

  • httpd.exe从命令行启动时成功运行,而不是作为服务启动。没有语法错误。
  • 即使从命令行运行,Apache 也不会作为服务 ( httpd.exe -k runservice)启动。
  • 问题可能不是文件访问权限之一。我抽查了关键位置(几个目录、日志文件),并且权限是相同的。但是,我没有对此进行详尽的测试。

尚未测试的一件事是尝试仅将数据和日志位置之一移动到新驱动器,而将另一个保持原样。我不认为这可能会有所作为。

......也就是说,我实际上不知道这里发生了什么。我想不出 Apache 仅通过更改日志文件和数据的位置就无法作为服务运行的任何原因。

我非常感谢有关此事的任何建议或意见。我很高兴根据建议进行进一步调查。如果你们中的任何一个人认为尝试只移动一个项目(日志或数据)是值得的,我会尝试这样做。同样,如果你们中的任何人认为我过于草率地取消许可,我将进行更彻底的检查。

欢迎任何和所有输入!我已经用尽了我所有的想法。

nmj*_*mjk 3

第二天,在分配的禁用服务器主要功能的时间段内,我去尝试一些新的东西,并产生了一个新的想法,最终解决了问题!在我所采取的步骤的背景下,详细信息如下。

我首先重复最初问题的第二种方法。我停止了服务,重新复制了所有文件(以捕获最后一天的修改),并编辑了 Apache 和 MySQL 配置文件以指向新驱动器 (F:)。我确认 Apache 也产生了同样的错误。由于我已经打开了配置文件,我决定尝试一下我最初没有尝试过的(实际上应该尝试过的):

  • 我重置了配置文件,使它们恢复到原始状态,指向旧驱动器 (D:)。
  • 我仅更新了对新驱动器 (F:) 的日志文件的引用,并测试了 Apache 服务——与之前的错误相同。
  • 我将日志文件引用返回到 D: 并将数据引用更新到 F: - 成功了!再说一次,我昨天真的应该尝试一下。我从这一步中了解到,问题出在日志文件上。
  • 由于只有两个文件(access.logerror.log),我强制更改权限:添加/删除只读(以防万一),确保 apache 用户具有通过目录和文件本身的递归写入访问权限。
  • 更新了对 F: 的日志文件引用——与以前相同的错误。
  • 凭直觉,我重命名了这两个日志文件(轮换日志文件的常用技术)并尝试启动服务,期望会出现原始文件名的新版本 - 结果确实如此!服务启动成功!胜利!!

我学到了什么:实际上,我并不完全确定。如果我没有如此彻底地完成调查的各个步骤,我会怀疑有问题的文件句柄或其他问题,但我不知道重新启动后如何可能实现这一点。然而,我已经证实了在解决问题时不要太快地排除可能性的价值。正如我在问题中提到的,我认为今天的调查可能不会产生影响,而且我仍然不知道为什么会产生影响!但你不能与结果争论。

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