CakePHP 2 和 Mac OS X 10.6 上的 launchd

为了定期运行(例如)维护作业,CakePHP 提供了编写 shell 的功能,这些 shell 应该由 cron 调用。然而,在最近的 Mac OS 系统上,cron 已经不再是最佳选择。取而代之的是“launchd”。我想展示如何使用 launchd 定期运行自定义 shell。

shell

shell 本身可以是您想要或已经编写的任何 shell。有关此方面的详细信息,请参阅 Cake 手册的“创建 shell”部分 Creating a Shell.

运行脚本的命令

在与上面链接的章节相邻的 Cake 手册章节中,作者建议使用一个简短的 shell 脚本,确保路径设置正确 - 然而,在我们的闪亮 Mac OS 系统上,我们不需要这样做。相反,我们只需使用提供的“cake”程序直接调用 shell:/path/to/your/cake/app/Console/cake yourshell

launchd 相关内容

launchd 希望我们创建一个 .plist 文件,其中包含有关我们要运行的程序的信息,以及我们希望何时运行它等等。我已经在这里发布了一个 示例 plist 文件,因为 Bakery 不允许我在此处发布代码...

由于我们可以指定一个工作目录(在 WorkingDirectory 键中),因此我们不需要使用 Cake 手册中建议的 cakeshell.sh。

StartInterval 键中,我们指定程序执行应重复的时间间隔。

为了让一切在启动时运行,将此文件保存到 /Library/LaunchDaemons/ - 由于我们在这里编写了一些服务器守护程序,因此这似乎是一个合适的位置。最好将文件命名为与您在 plist 文件中标记的名称相同(只是添加 .plist 作为结尾...)。或者,您也可以将文件保存到其他位置,并通过调用 launchctl load /path/to/your/com.foo.bar.plist 手动加载它,但您必须在每次重新启动后重复此操作才能使其持续运行。

欢迎在评论中发布任何问题,尽管我可能无法回答很多问题,因为我当然不是任何这些领域的专家!:-)