×

使用launchctl 管理多版本 php-fpm

Falcon 2024-05-17 views:
自动摘要

正在生成中……

由于我混用新旧版的homebrew,也就是保留旧版homebrew安装的应用,同时使用新版来安装应用,并且我还使用多个版本的应用,比如php就装了5.6,7.1,7.4,8.0,8.2,我还是不喜欢用 docker,这玩意看似解决了一些版本问题,实则带来了更多的问题。至少我在本地开发上不喜欢,部署是另一回事。这些是题外话。

用brew services来管理应用的启动也不好使,有时候我明明使用brew serices stop停掉了某个服务,然而一看进程它还活得好好的,我不信任它的管理能力。

最后决定使用 launchctl :参考之前搬运的文章: Mac中的定时任务利器:launchctl - 新动弹计划

我所有php-fpm启动项路径位于:

~/Library/LaunchAgents

如果又加了新版本php,再复制一个过去,都是以homebrew.mxcl.php@版本号.list 的风格命名,

复制过去后加载任务,假设是php10.0,先在上面的目录创建这个文件,然后执行:

launchctl load -w homebrew.mxcl.php@10.0.plist

加载任务 -w选项会将plist文件中无效的key覆盖掉

  • 查看任务:
launchctl list | grep php
2756	0	homebrew.mxcl.php@5.6
2752	0	homebrew.mxcl.php@8.2
2734	0	homebrew.mxcl.php@7.1
42324	0	homebrew.mxcl.php@7.4
2748	0	homebrew.mxcl.php@8.0
  • 开始任务,其实上面load的时候就启动了:
launchctl load homebrew.mxcl.php@10.0.plist
  • 结束任务,貌似会取消开机启动。
launchctl unload -w homebrew.mxcl.php@10.0

还是看看chatgpt的总结吧:launchctl 是macOS操作系统中用于与 launchd 服务管理守护进程交互的命令行工具。launchd 是系统启动和服务管理的核心,负责加载和管理后台服务。 以下是一些基本的 launchctl 命令用法: 启动服务(假设你有一个叫 com.example.service 的服务):

launchctl load /Library/LaunchDaemons/com.example.service.plist

停止服务:

launchctl unload /Library/LaunchDaemons/com.example.service.plist

列出所有已加载的服务:

launchctl list

启动用户级别的服务:

launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.service.plist

停止用户级别的服务:

launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.service.plist

请注意,对于 .plist 文件路径,你需要使用正确的路径位置,/Library/LaunchDaemons/ 通常是全局服务的位置,~/Library/LaunchAgents/ 是用户级别服务的位置。 这只是 launchctl 功能的一个简单介绍。launchctl 具有许多高级选项,可以用于更细致地控制系统服务。在使用 launchctl 进行重要的系统修改之前,务必确保你了解你正在执行的操作,以免影响到系统的稳定性。通过 man launchctl 可以查看更详尽的帮助信息。

本文收录于