Utilisation de postgres avec launchd sans problèmes constants

J'ai postgres et le passager installé à partir de homebrew, et j'utilise l'OS x construit dans Apache. J'ai plusieurs applications de rails qui utilisent postgres qui sont gérées par un passager qui, à son tour, est géré par apache.

Actuellement, apache est lancé par launchd à démarrer à partir de /System/Library/LaunchDaemons/org.apache.httpd.plist , apache démarre le passager via /etc/apache2/other/passenger.conf et une fois que je me suis connecté, Postgres est lancé via ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist .

Tout commence bien et fonctionne bien jusqu'à ce que je devrais fermer ou redémarrer mon Mac; Ensuite, je me heurte à un problème avec la façon dont le lancement a tout déchiré. Fondamentalement, Launchd envoie SIGTERM à chaque process user, puis 20 secondes plus tard ( http://www.opensource.apple.com/source/launchd/launchd-842.92.1/src/core.c ) envoie SIGKILL, mais Postgres traite SIGTERM comme un signal "arrêt intelligent" ( http://www.postgresql.org/docs/9.5/static/server-shutdown.html ) et attend toutes les sessions existantes pour se fermer avant de quitter. Le problème est que les sessions appartiennent aux applications de rails qui fonctionnent sous le passager et ne s'arrêtent donc pas jusqu'à ce que Apache s'arrête. Et apache ne s'arrête pas jusqu'à ce que le système soit éteint. Ce qui signifie que Postgres obtient SIGKILL ed et laisse son file postmaster.pid qui empêche Postgres de démarrer le prochain démarrage jusqu'à ce que ce file soit rm .

Est-ce que le déménagement de /Library/LaunchDaemons/ être lancé dans /Library/LaunchDaemons/ être une meilleure idée? Il pourrait potentiellement que postgres et apache soient fermés en même time, ce qui, count tenu de 20 secondes pour arrêter, devrait être suffisant pour que postgres puisse sortir proprement. Mais il me manquait une solution plus facile.

J'ai terminé de déplacer le postgres launchd plist vers / Library / LaunchDaemons et en ajoutant une paire de key / valeur UserName (postgres ne fonctionnera pas en tant que root).