OS-X Leopard Apache 启动时行为不符合预期

OS-X Leopard Apache 启动时行为不符合预期

我正在尝试在 Leopard 下启动并运行 PHP PDO MySQL 驱动程序,我基本上遵循了以下想法汤姆·吉登强制 Apache 以 i386 运行,而不是 Leopard 默认的 x86_64 运行。

根据汤姆的想法,我复制了

/System/Library/LaunchDaemons/org.apache.httpd.plist

/Library/LaunchDaemons/org.apache.httpd.plist 

并添加了在 32 位模式下运行 Apache 的标志:

<string>arch</string>
<string>-i386</string>
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>

我也已经确认Arch 文档/Library/LaunchDemons 应该在 /System/Library/LaunchDaemons 之前处理

当我重新启动 Mac 并通过活动监视器检查进程时,httpd 进程被标记为“intel”——这正是我希望看到的。

但是,如果我打开“系统偏好设置”->“共享”,然后通过取消选中并重新选中“Web 共享”选项来重新启动 Apache,Apache 将以 64 位模式启动(在活动监视器中显示为“Intel(64 位)”进程)。这不是我期望看到的!

所以我的问题是:

  • 为什么我发现通过系统偏好设置启动 Apache 的行为与通过重新启动的行为不同?

  • 我是否应该删除/重命名 /System/Library/LaunchDaemons/org.apache.httpd.plist 文件,或者是否有更好的方法?

  • 或者我只是在以一种疯狂的方式做事?

感谢您的帮助。

任何人??

答案1

如果你希望在 Apple 设置之外进行操作并希望获得一致的控制,请考虑使用麦克波特。它将允许您完全控制所使用的 Apache、MySQL 和 PHP 版本等。

依赖 Apple 的 Apache+PHP 套件的一个问题是,他们可以在软件更新中更新它,而且不会发出太多警告。这可能会导致您的 AMP 堆栈损坏 :(

答案2

我相信您可以通过运行以下命令来验证实际传递给应用程序的参数:

ps auxw | grep http

我知道当我在处理服务时,我非常喜欢使用林贡(尽管它不再积极开发。)它可以很好地说明哪些任务被安排,它可以帮助检查您的任务是否设置为活动状态,我相信它会检查您的 plist 文件的一致性(尽管由于您是从现有文件开始的,因此它很可能是好的),并且它非常适合编辑启动的 plist 文件。请务必查看专家模式,尤其是查看现有文件时,并注意在帮助菜单下,您可以访问所有相关的手册页。

您可能需要在 plist 配置文件中更改服务的名称。要检查服务是否可用且已打开,您可以执行以下操作:

service --test-if-available org.apache.httpd && echo "Available" || echo "Not available"
service --test-if-configured-on org.apache.httpd && echo "On" || echo "Off"

[但请将命令中的“org.apache.httpd”替换为您配置的内容。请注意,您可以运行

service --list

查看所有服务的列表,但不幸的是,数据没有发送到标准输出,因此您无法通过管道传输它。

另一个可以帮助您解决这个问题的有用工具是启动控制

要查看已安排的任务,您可以运行:

launchctl list

请注意,以用户身份执行此操作与以 root 身份执行此操作会得到不同的结果。我相信 root 会看到从 /System/Library/LaunchDaemons 和 LaunchAgents 安排的任务,而用户会看到从 /Library/LaunchDaemons 和 LaunchAgents 安排的任务。

Launchctl 还允许您安排/取消安排任务。请注意,在配置文件中,有一个键表示作业是否已禁用。您可以编辑该文件,或者在使用 launchctl load 或 unload 命令时,可以使用 -W 标志覆盖当前设置并将其写回磁盘。

您引用的站点列出了取消计划原始任务和计划替换的命令,如下所示:

sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist
sudo launchctl load /Library/LaunchDaemons/org.apache.httpd.plist

这看起来确实正确(虽然我不确定第二个是否需要 sudo)。


为什么 apache 的启动方式与系统偏好设置不同?我有两个猜测。

  1. 它使用 /System/Library/LaunchDaemons(如果您备份并覆盖它,您将获得您想要的结果)
  2. 它直接启动apache,而不使用launchctl。

我打开了控制台,同时切换了开关。system.log 中没有显示任何内容。在 /var/log/apache2/error.log 中,确实显示应用程序已关闭并启动,但我不知道这是否是直接的。


我想我会做的是:

  • 删除 /Library/LaunchDaemons/org.apache.httpd.plist
  • 备份 /System/Library/LaunchDaemons/org.apache.httpd.plist,可能备份到另一个文件夹
  • 编辑它(我可能会使用 Lingon)以 32 位模式启动 apache
  • 看看重新启动/重新加载任务时它是否有效
  • 查看打开或关闭网络共享时是否有效
  • 如果它确实有效,也请备份文件的修改版本(以防操作系统更新破坏它)。

相关内容