Fes persistents les variables d’un servei Homebrew sense editar el plist

Configura un servei local perquè conservi el seu entorn després d’actualitzar-lo

Fes persistents les variables d’un servei Homebrew sense editar el plist

Quan una actualització esborra una decisió que era teva

Un servei instal·lat amb Homebrew sembla senzill fins que necessita context propi: un port, un fitxer de configuració, un perfil d’execució o una ruta de dades. Molta gent obre el plist que Homebrew ha creat a ~/Library/LaunchAgents, l’edita i ho deixa funcionant. La incidència apareix a la següent actualització o reinici del servei: Homebrew pot regenerar aquell fitxer i la modificació desapareix.

Homebrew preveu una via més estable. Cada servei pot llegir variables d’entorn des d’un fitxer situat a ~/.homebrew/services/<formula>.env, llevat que l’organització hagi definit un altre valor per a HOMEBREW_USER_CONFIG_HOME. Els canvis s’apliquen amb el següent reinici i persisteixen després de les actualitzacions. (docs.brew.sh)

Suposem un cas realista: un equip manté una fórmula interna anomenada inventory-api. El procés ja incorpora un servei Homebrew i llegeix APP_ENV, APP_PORT i APP_CONFIG. Cal que s’executi com a API local de proves, al port 9080, amb una configuració fora del repositori. La decisió important aquí és separar paquet i política local: la fórmula descriu com s’instal·la i s’arrenca l’aplicació; el fitxer .env expressa què necessita aquest Mac concret.

Abans de començar, confirmeu que treballeu amb el compte que és propietari de la instal·lació de Homebrew. Homebrew està pensat per tenir un compte gestor; els serveis d’usuari també pertanyen a aquest compte. (docs.brew.sh) En un Mac administrat, eviteu executar aquestes ordres des d’un script MDM com a root si el servei ha de viure en la sessió d’una persona: Homebrew ofereix brew as-console-user per actuar com l’usuari de consola, però falla si no hi ha cap sessió compatible oberta. (docs.brew.sh)

  1. Primer, reviseu l’estat actual:

brew services info inventory-api

Aquesta ordre no modifica res. Mostra la informació que Homebrew conserva sobre el servei i ajuda a confirmar que la fórmula publica una definició de servei. Si l’API no té suport de servei, caldrà arrencar-la amb un altre mecanisme.

  1. Creeu el directori de configuració i limiteu-ne l’accés:

mkdir -p ~/.homebrew/services && chmod 700 ~/.homebrew/services

mkdir -p crea el directori només si falta. chmod 700 reserva lectura, escriptura i execució per al vostre usuari. És una precaució raonable perquè aquest espai sol acabar contenint rutes internes o paràmetres sensibles.

  1. Escriviu les variables persistents:

printf '%s\n' 'APP_ENV=staging' 'APP_PORT=9080' 'APP_CONFIG=/Users/nom/Library/Application Support/Inventory/config.yml' > ~/.homebrew/services/inventory-api.env && chmod 600 ~/.homebrew/services/inventory-api.env

Aquesta ordre substitueix el contingut del fitxer; conserveu-ne una còpia abans d’afegir-hi variables existents. chmod 600 impedeix que altres comptes locals el llegeixin. No hi deseu contrasenyes ni tokens si l’aplicació disposa d’un magatzem de credencials més adequat: les variables d’entorn són còmodes, però formen part del context del procés.

  1. Reinicieu i verifiqueu:

brew services restart inventory-api

Homebrew atura el procés si cal, recrea el registre del servei i el deixa configurat per iniciar-se en entrar a la sessió. Sense sudo, treballa amb ~/Library/LaunchAgents; amb sudo, passa a l’àmbit de sistema i a /Library/LaunchDaemons, que arrenca durant l’inici del Mac. Aquesta diferència condiciona permisos, accés a la interfície i responsabilitat operativa. (docs.brew.sh)

Comproveu el resultat amb:

brew services list

I, si necessiteu diagnòstic de baix nivell:

launchctl print gui/$(id -u)/sh.brew.inventory-api

Les versions recents de Homebrew utilitzen l’etiqueta sh.brew.<formula> per als serveis nous o reiniciats; una instal·lació antiga pot conservar una etiqueta anterior fins al reinici. (brew.sh)

El petit repte final és convertir aquesta pràctica en norma: trieu un servei intern, moveu-ne una variable local al fitxer .env, reinicieu-lo i documenteu qui pot modificar aquella configuració. Quan el paquet i la decisió local deixen de competir dins del mateix plist, les actualitzacions recuperen la seva naturalesa: manteniment, no reconstrucció.

Per saber-ne més

Manual oficial de brew services

Utilitza els fitxers d’entorn de Homebrew Services per aplicar configuració persistent a un servei de desenvolupament al Mac.

🔝

Apple Homebrew

Altres:

Una cua de tancament al Mac amb el giny de Recordatoris

2023

2024

2026