Чтобы запустить другую установленную версию формулы Homebrew в качестве фоновой службы macOS, остановите службу текущей формулы, запустите версионированную формулу по её собственному имени, а затем проверьте, какая служба работает. Например, если установлены и postgresql@16, и postgresql@17, используйте brew services stop postgresql@16, а затем brew services start postgresql@17. Диспетчер служб Homebrew использует macOS launchd; без sudo он регистрирует службы для запуска при входе в систему. Руководство по brew(1) от Homebrew
1. Найдите имена установленных формул
Используйте собственные данные Homebrew, чтобы проверить, что именно установлено и как пишутся имена формул:
brew list --versions
brew info postgresql@16
brew info postgresql@17
Замените примеры именами формул вашей службы. Версионированная формула — это отдельная формула Homebrew, обычно записываемая с суффиксом @; это не команда для выбора произвольной исторической версии одной формулы. Доступные версионированные формулы зависят от того, что в настоящее время предоставляет Homebrew. Homebrew также отмечает, что версионированные формулы представляют собой ограниченный набор, и некоторые из них могут со временем удаляться. Версии формул Homebrew
Перед переключением изучите вывод brew info для каждой формулы, чтобы узнать сведения о её службе и примечания по миграции. Новое имя формулы не гарантирует, что служба сможет повторно использовать каталог данных или конфигурацию старой версии. Серверное ПО и базы данных могут иметь специфические требования к обновлению или понижению версии; следуйте документированному процессу миграции этого ПО, прежде чем запускать другую версию на существующих данных.
2. Остановите службу одной формулы и запустите другую
Выполняйте команды управления службой без sudo для службы, которая запускается при входе в систему:
brew services stop postgresql@16
brew services start postgresql@17
brew services list
Используйте фактические идентификаторы установленных формул вместо примеров с PostgreSQL. brew services stop и start принимают имя формулы, выбирая тем самым службу, связанную с целевой формулой. Команда list позволяет проверить итоговый статус служб, сообщаемый Homebrew. Руководство описывает управление службами через launchd и указывает, что запуск без sudo использует ~/Library/LaunchAgents, поэтому служба привязана ко входу текущего пользователя. Руководство по brew(1) от Homebrew
Если целевая версия установлена, но её служба не запущена, запустите её напрямую. Если требуется перезапуск одной и той же формулы, для этого предусмотрена команда brew services restart FORMULA; при смене версий явная остановка старой формулы и запуск новой делают переход прозрачным и понятным. Не используйте brew services restart --all для переключения одной службы, так как это повлияет на все службы Homebrew.
3. Понимание различий между службой и выбором команды
Запуск версионированной формулы в виде службы не обязательно делает её утилиты командной строки версией по умолчанию в Терминале. Homebrew устанавливает каждую формулу в отдельный версионированный каталог Cellar (keg). Связывание (linking) формулы создает символические ссылки в общем префиксе Homebrew, тогда как некоторые версионированные формулы имеют статус keg-only и по умолчанию туда не связываются. Руководство по brew(1) от Homebrew, Часто задаваемые вопросы по Homebrew: Что означает «keg-only»?
Проверьте brew info FORMULA, чтобы узнать, является ли формула keg-only, и ознакомиться с рекомендациями по настройке PATH. Если вам нужно только, чтобы фоновая служба использовала другую версию, управляйте её службой по имени формулы; не предполагайте, что изменение символических ссылок обязательно. Избегайте использования brew link --force в качестве стандартного шага переключения: Homebrew предупреждает, что принудительное связывание формулы keg-only в общие каталоги может вызвать конфликты. Рекомендации Homebrew по зависимостям keg-only
4. Если целевая служба не запускается
Сначала проверьте вывод brew services list и brew info целевой формулы. Убедитесь, что старая служба остановлена, а новая формула действительно предоставляет определение службы; поддержка служб в Homebrew зависит от наличия соответствующей конфигурации в формуле. Кулинарная книга формул Homebrew
Затем проверьте собственные журналы и конфигурацию приложения. Служба может завершиться с ошибкой, даже если формула установлена — например, из-за того, что её конфигурация указывает на другой каталог данных, порт уже занят или версия не может открыть существующие данные. Это вопросы на уровне самого приложения, а не проблемы, автоматически решаемые Homebrew; обратитесь к официальной документации приложения перед изменением или удалением данных.
Используйте sudo brew services только в том случае, если вам действительно необходима общесистемная служба, запускаемая при загрузке. Homebrew указывает, что этот режим работает в /Library/LaunchDaemons, тогда как стандартная пользовательская служба запускается при входе в систему. Большинством служб для персональной разработки следует управлять из-под учетной записи пользователя, владеющей их файлами. Руководство по brew(1) от Homebrew
Таким образом, успешное переключение включает две проверки: Homebrew сообщает, что нужная формула запущена, а само приложение отвечает должным образом. Статус службы сам по себе не гарантирует совместимость данных и не подтверждает, что клиенты командной строки теперь используют именно эту версию формулы.
Источники
Документация Homebrew: brew(1) – The Package Manager for Everywhere — Homebrew
Документация Homebrew: Formulae Versions — Homebrew
Документация Homebrew: FAQ — Homebrew
Документация Homebrew: Building Software with Homebrew Keg-Only Dependencies — Homebrew
Документация Homebrew: Formula Cookbook — Homebrew