自动摘要
正在生成中……
由于我混用新旧版的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
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
可以查看更详尽的帮助信息。