Tengo postgres y de pasajeros instalado desde el homebrew, y utilizar el os x de apache. Tengo varios rieles de las aplicaciones que uso postgres, que son gestionadas por los pasajeros que a su vez es manejado por el apache.
Actualmente apache se inicia por launchd en el arranque de /System/Library/LaunchDaemons/org.apache.httpd.plist
, apache se inicia de pasajeros 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 fina y funciona muy bien hasta que tengo que apagar o reiniciar mi mac; entonces me encuentro con un problema con cómo launchd las lágrimas por todo. Básicamente Launchd envía SIGTERM a cada proceso de usuario y, a continuación, 20 segundos más tarde (http://www.opensource.apple.com/source/launchd/launchd-842.92.1/src/core.cenvía el SIGKILL, pero postgres trata SIGTERM como un "smart shutdown" de la señal (http://www.postgresql.org/docs/9.5/static/server-shutdown.html) y espera a que todas las sesiones existentes a cerca de sí mismos antes de dejar de fumar. El problema es que las sesiones son propiedad de los rieles de las apps que se ejecutan en virtud de pasajeros y por lo tanto no se apaga hasta que apache se apaga. Y apache no se cierre hasta que el sistema se está cerrando. Lo que significa que postgres consigue SIGKILL
ed y hojas es postmaster.pid
archivo alrededor que impide postgres desde el inicio hasta el siguiente arranque hasta que me rm
de ese archivo.
Iba a mover postgres del launchd plist a /Library/LaunchDaemons/
ser una mejor idea? Se podría hacer postgres y apache puede apagar al mismo tiempo, que le dan 20 segundos para detener debería ser suficiente para que postgres para salir limpiamente. Pero yo podría estar perdiendo una solución más fácil.