要将另一个已安装的 Homebrew formula 版本作为 macOS 后台服务运行,请停止当前 formula 的服务,通过带版本号的 formula 自身名称启动它,然后确认正在运行的服务。例如,如果同时安装了 postgresql@16 和 postgresql@17,请使用 brew services stop postgresql@16,然后使用 brew services start postgresql@17。Homebrew 的服务管理器使用 macOS launchd;在不使用 sudo 的情况下,它会将服务注册为在用户登录时运行。Homebrew 的 brew(1) 手册
1. 查找已安装的 formula 名称
使用 Homebrew 自身的记录来检查已安装的内容以及 formula 名称的拼写方式:
brew list --versions
brew info postgresql@16
brew info postgresql@17
请将示例替换为您服务的 formula 名称。带版本号的 formula 是一个独立的 Homebrew formula,通常带有 @ 后缀;它不是用来任意选择某个 formula 历史版本的命令。可用的带版本号 formulae 取决于 Homebrew 当前提供的内容。Homebrew 还指出带版本号的 formulae 数量有限,并且某些可能会随着时间推移被移除。Homebrew Formulae 版本
在切换之前,请检查每个 formula 的 brew info 输出,以了解其服务详情和任何迁移说明。新的 formula 名称并不保证该服务可以重用旧版本的数据目录或配置。数据库和服务器软件可能有特定于应用程序的升级或降级要求;在针对现有数据启动另一个版本之前,请遵循该软件记录的迁移流程。
2. 停止一个 formula 的服务并启动另一个
对于在登录时启动的服务,请在不使用 sudo 的情况下运行服务命令:
brew services stop postgresql@16
brew services start postgresql@17
brew services list
使用实际安装的 formula 标识替换 PostgreSQL 示例。brew services stop 和 start 接受 formula 名称作为参数,因此这将选择与目标 formula 关联的服务。之后可以使用 list 命令检查 Homebrew 报告的服务状态。手册记录了通过 launchd 进行的服务管理,并指出非 sudo 设置使用 ~/Library/LaunchAgents,因此其作用域限定为当前用户的登录会话。Homebrew 的 brew(1) 手册
如果目标版本已安装但其服务未运行,直接启动它即可。如果想对同一个 formula 进行重启,文档中记录了 brew services restart FORMULA;但在更改版本时,显式停止旧 formula 并启动新 formula 可以使预期的转换更加明确。不要针对单个服务的切换使用 brew services restart --all,因为这会影响每一个 Homebrew 服务。
3. 理解服务选择与命令选择之间的区别
将带版本号的 formula 作为服务启动并不一定会使其命令行工具成为终端中的默认工具。Homebrew 会将每个 formula 安装到带版本号的 Cellar keg 中。链接 formula 会在 Homebrew 的共享前缀路径中创建符号链接,而某些带版本号的 formulae 会被标记为 keg-only,默认情况下不会链接到该处。Homebrew 的 brew(1) 手册、Homebrew 常见问题解答:“keg-only”是什么意思?
检查 brew info FORMULA 以确认该 formula 是否为 keg-only 以及是否有任何提供的 PATH 指引。如果只需要后台服务使用另一个版本,通过 formula 名称管理其服务即可;不要认为必须更改链接。避免将 brew link --force 作为常规切换步骤:Homebrew 警告称,强制将 keg-only formula 链接到共享目录可能会引起冲突。Homebrew 关于 keg-only 依赖项的指引
4. 如果目标服务启动失败
首先检查 brew services list 以及目标 formula 的 brew info 输出。确认旧服务已停止,并且新 formula 确实提供了服务定义;Homebrew 的服务支持依赖于 formula 中包含的服务配置。Homebrew Formula Cookbook
接下来,检查应用程序自身的日志和配置。即使已安装 formula,服务也可能启动失败——例如,因为其配置指向了不同的数据目录、端口已被占用,或者某个版本无法打开现有数据。这些属于应用程序层面的可能性,而非 Homebrew 能保证解决的问题;在更改或删除数据之前,请参阅该应用程序的官方文档。
仅当您确实需要一个在开机引导时启动的系统级服务时,才使用 sudo brew services。Homebrew 记录了该模式在 /Library/LaunchDaemons 中运行,而默认的用户服务则是在登录时启动。大多数个人开发服务应在拥有其文件的用户账户下进行管理。Homebrew 的 brew(1) 手册
因此,一次成功的切换需要经过两项检查:Homebrew 报告目标 formula 正在运行,并且应用程序本身的响应符合预期。仅凭服务状态并不能验证数据兼容性,也不能证明命令行客户端现在会解析到该 formula 版本。
来源
Homebrew 文档:brew(1) – 适用于所有环境的包管理器 — Homebrew
Homebrew 文档:Formulae 版本 — Homebrew
Homebrew 文档:常见问题解答 — Homebrew
Homebrew 文档:使用 Homebrew Keg-Only 依赖项构建软件 — Homebrew
Homebrew 文档:Formula Cookbook — Homebrew