Ich möchte PostgreSQL 9.1 mit Supervisor auf Ubuntu 10.04 ausführen. Im Moment ich PostgreSQL mit dem Init-Skript manuell starten:Running PostgreSQL mit Supervisord
/etc/init.d/postgresql start
Nach diesem Beitrag: http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/, ich brauche die PostgreSQL-Config zu ändern, um es auf dem TCP-Port statt Unix-Socket laufen zu lassen, um zu machen PostgreSQL arbeitet mit Supervisor.
Ich habe zwei Fragen zu diesem Ansatz:
Betrachtet man dies eher Hack ist, gibt es eine Implikation (zum Beispiel Sicherheit/Berechtigungen, Leistung, etc.), dies zu tun?
Warum können wir nicht einfach das gleiche Init-Skript
postgresql
in Supervisor-Konfiguration ausführen? Stattdessen, wie im obigen Link gezeigt, läuft espostmaster
?
UPDATE:
Dank der nützlichen Anregungen von beiden Antworten unten, ich habe Setup ein Skript für den Supervisor PostgreSQL direkt aufzurufen:
#!/bin/sh
# This script is run by Supervisor to start PostgreSQL 9.1 in foreground mode
if [ -d /var/run/postgresql ]; then
chmod 2775 /var/run/postgresql
else
install -d -m 2775 -o postgres -g postgres /var/run/postgresql
fi
exec su postgres -c "/usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf"
Ich habe auch die config: /etc/postgresql/9.1/main/start.conf
zu manual
, so dass PostgreSQL nicht automatisch beim Booten startet (es ist mir jedoch nicht klar, ob diese Konfiguration geladen ist). Und dann habe ich Setup die Supervisor-Config für Postgres als:
[program:postgres]
user=root
group=root
command=/usr/local/bin/run_postgresql.sh
autostart=true
autorestart=true
stderr_logfile=/home/www-data/logs/postgres_err.log
stdout_logfile=/home/www-data/logs/postgres_out.log
redirect_stderr=true
stopsignal=QUIT
So, jetzt kann ich PostgreSQL in supervisorctl
indem start postgres
, beginnen die fein läuft. Allerdings, nachdem ich stop postgres
, obwohl supervisorctl
deklariert postgres gestoppt wird, ist der Server anscheinend noch läuft, wie ich psql hinein kann.
Ich frage mich, ob dies ein Supervisor Config-Problem oder ein PostgreSQL-Problem ist. Jeder Vorschlag willkommen!
danke für dich Punkt auf meine zweite Frage, das wurde gut erklärt! Bezogen Sie sich auf meine erste Frage (und Ihre Interpretation dessen, was tatsächlich mit dem Skript im Link passiert), schlagen Sie vor, dass ich ein Skript schreiben soll, das das notwendige Verzeichnis für postgresql erstellt und dann 'postmaster' (oder' postgres'?) mit der ursprünglichen postgresql config, und rufen Sie dieses Skript stattdessen in der Supervisor Config-Datei? – MLister
Richtig, Sie können ein Shell-Skript haben, das grundsätzlich '[-d/run/postgresql] || make_rundir; exec /usr/lib/postgresql/9.1/postgres "$ @" ', das das Verzeichnis bei Bedarf erstellt und dann die ausführbare Datei' postgres' kettet ('postmaster' ist jetzt ein veralteter Name). Mit Supervise würde dies buchstäblich im Service-Verzeichnis "run" genannt werden. – araqnid
Ihre Annahme, dass 'supervisord' genauso funktioniert wie' supervise', ist korrekt; Es startet und respawnen einen Subprozess für Dämonen unter seiner Verantwortung. –