Uso de postgres con launchd sin problemas constantes

3

He instalado postgres y pasajeros desde Homebrew, y uso el OS X incorporado en Apache. Tengo varias aplicaciones de rieles que usan postgres que son administradas por el pasajero y que a su vez son administradas por apache.

Actualmente, Apache se inicia con launchd en el arranque desde /System/Library/LaunchDaemons/org.apache.httpd.plist , Apache inicia al pasajero a través de /etc/apache2/other/passenger.conf y una vez que haya iniciado sesión en postgres se inicia a través de ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist .

Todo comienza bien y funciona bien hasta que necesito apagar o reiniciar mi mac; Entonces me encuentro con un problema con cómo Launchd derriba todo. Básicamente, Launchd envía SIGTERM a cada proceso de usuario y luego 20 segundos después ( enlace ) envía SIGKILL, pero postgres trata a SIGTERM como una señal de "apagado inteligente" ( enlace ) y espera a que todas las sesiones existentes se cierren antes de salir. El problema es que las sesiones son propiedad de las aplicaciones de Rails que se ejecutan bajo el pasajero y, por lo tanto, no se cerrarán hasta que Apache se apague. Y apache no se apaga hasta que el sistema se apague. Lo que significa que postgres obtiene SIGKILL ed y deja su archivo postmaster.pid alrededor, lo que evita que postgres inicie el próximo arranque hasta que yo rm ese archivo.

¿Sería una mejor idea mover la estrategia de lanzamiento de postgres a /Library/LaunchDaemons/ ? Potencialmente podría hacer que postgres y apache se apaguen al mismo tiempo, lo cual, dado 20 segundos para detenerse, debería ser suficiente tiempo para que los postgres salgan limpiamente. Pero podría faltar una solución más fácil.

    
pregunta Camden Narzt 26.03.2016 - 16:49

1 respuesta

0

Acabé de mover el postgres launchd plist a / Library / LaunchDaemons y agregar un par de valor / clave de nombre de usuario (postgres no se ejecutará como root).

    
respondido por el Camden Narzt 29.04.2016 - 17:03

Lea otras preguntas en las etiquetas