我管理一个在 Windows Server 2008 上运行的 Web 服务器,它是 64 位虚拟主机。所有服务软件都独立运行,而不是作为 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 会因为更改日志文件和数据的位置而无法作为服务运行。
我将非常感激任何关于此事的建议或意见。我很乐意根据建议进一步调查。如果你们中有人认为值得尝试只移动上述项目之一(日志或数据),我会尝试这样做。同样,如果你们中有人认为我太急于放弃权限,我会进行更彻底的检查。
欢迎大家提出任何意见!我已经想尽了所有想法。
答案1
第二天,在禁用服务器主要功能的指定时间段内,我去尝试了一些新方法,并有了新的想法,最终解决了问题!以下是我采取的步骤的详细信息。
我开始重复原始问题中的第二种方法。我停止了服务,重新复制了所有文件(以捕获最后一天的修改),并编辑了 Apache 和 MySQL 配置文件以指向新驱动器 (F:)。我确认 Apache 产生了相同的错误。由于我已经打开了配置文件,我决定尝试最初没有尝试过的方法(但确实应该尝试):
- 我重置了配置文件,使它们恢复到原始状态,指向旧驱动器(D:)。
- 我仅将日志文件的引用更新到新驱动器(F:)并测试了 Apache 服务——与之前相同的错误。
- 我将日志文件引用返回到 D:,并将数据引用更新到 F: -- 成功了!再说一次,我真的应该昨天就试过这个。从这一步中我了解到问题出在日志文件上。
- 由于只有两个文件(
access.log
和error.log
),我强制更改权限:添加/删除了只读(以防万一),确保 apache 用户对目录以及文件本身具有递归写访问权限。 - 更新了对 F: 的日志文件引用——与之前的错误相同。
- 凭直觉,我重命名了这两个日志文件(这是轮换日志文件的常用技术),并尝试启动服务,希望出现原始文件名的新版本——结果确实如此!服务成功启动!大获全胜!
我学到的是:实际上,我并不完全确定。如果我没有如此彻底地进行调查,我会怀疑文件句柄有问题或其他问题,但我看不出重启后怎么可能出现这种情况。但是,我已经确认了不是在解决问题时太快否定了各种可能性。正如我在问题中提到的,我认为今天的调查线索不太可能产生影响,而且我仍然不知道为什么会产生影响!但你不能对结果提出异议。
结论:我的问题已经解决,但我不知道为什么。如果有人有理论,请分享!
答案2
我不知道为什么更改驱动器号会导致此问题。但The service terminated with service-specific error Incorrect function
Windows 服务中的错误通常是由于物理 RAM 不足造成的。
检查 Apache 文档上的最低系统要求,如果需要,尝试关闭不必要的程序。
答案3
我刚刚在使用 mod_wsgi 时遇到了同样的问题WSGIPythonHome
。根据 nmjk 的回答,我决定检查权限,并意识到 Apache 用户没有该WSGIPythonHome
目录的权限。添加适当的权限后,Apache 正常启动。
也许值得仔细检查配置指定的所有路径的权限,并逐行注释掉任何包含路径的配置,以找出哪一个导致了问题。
答案4
我的问题是一样的,我已将日志文件夹移动到新驱动器。我按照有关重命名 error.log 文件的说明操作,并尝试启动 Apache,但失败并出现相同的错误。因此,我重新启动了 Windows 10 计算机,Apache 成功启动。