OS-X豹阿帕奇开始不按预期行事

我正在试图在Leopard下运行一个PHP PDO MySQL驱动程序,我基本上遵循了Tom Gidden的想法,强制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并通过Activity Monitor检查进程时,httpd进程被标记为“intel” – 这是我期望看到的。

但是,如果我打开系统首选项 – >通过取消选中并重新检查“Web共享”选项来共享并重新启动Apache,则Apache将以64位模式启动(如Activity Monitor中所示的“Intel(64位)”进程。不是我期望看到的!

所以我的问题是:

  • 为什么我通过“系统偏好设置”看到启动Apache导致的行为与通过重新启动不同?

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

  • 还是我只是在以疯狂的方式做事情?

谢谢你的帮助。

任何人??

如果您想在Apple设置之外执行某些操作并希望进行一致的控制,请考虑使用Macports 。 它将允许你完全控制你正在使用的Apache,MySQL和PHP的版本等。

依靠苹果公司的Apache + PHP套件的一个问题是,他们可以并将在一个软件更新没有更多的警告更新它。 这可以让你的你的AMP堆栈损坏:(

我相信你可以通过运行validation实际传递给应用程序的参数:

 ps auxw | grep http 

我知道什么时候我在使用服务,我真的很喜欢使用Lingon (尽pipe它不再被积极开发)。它能够很好地了解哪些任务是计划好的,它可以帮助检查您的任务是否处于活动状态或者没有,我相信它会检查你的plist文件的一致性(虽然,因为你从一个现有的文件开始,它可能是好的),编辑一个启动plist文件真的很好。 请务必查看专家模式,特别是查看现有文件,并注意在帮助菜单下,您可以访问所有相关的手册页。

您可能需要在plistconfiguration文件中更改服务的名称。 要检查它是否可用,您可以执行以下操作:

 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 

看到所有服务的列表,但不幸的是,数据不会转到标准输出,你不能pipe它。]

另一个有用的工具来帮助你解决这个问题是launchctl 。

要查看计划哪些任务,可以运行:

 launchctl list 

请注意,如果以用户身份执行操作,则会得到不同的结果,而不是以root身份执行操作。 我相信root会看到从/ System / Library / LaunchDaemons和LaunchAgents调度的任务,并且用户看到从/ Library / LaunchDaemons和LaunchAgents调度的任务。

Launchctl也可以让你安排/不定期的任务。 请注意,在configuration文件中,有一个关键字指明作业是否被禁用。 您可以编辑该文件,或者在使用launchctl load或unload命令时,可以使用-W标志覆盖当前设置并将其写回到磁盘。

您引用的站点列出了用于取消调度您的replace中的原始任务和计划的命令,如下所示:

 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中,它确实显示应用程序已closures并启动,但我不知道它是否是直接的。


我想我会做的是:

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