Quiero ejecutar PostgreSQL 9.1 usando Supervisor en Ubuntu 10.04. Por el momento, comienzo manualmente PostgreSQL usando el guión de inicio:Ejecutando PostgreSQL con Supervisord
/etc/init.d/postgresql start
De acuerdo con este mensaje: http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/, tengo que modificar la configuración de PostgreSQL para hacer que se ejecute en el puerto TCP en lugar de socket de Unix, con el fin de hacer PostgreSQL trabaja con el supervisor.
Tengo dos preguntas con respecto a este enfoque:
considerando que es más de corte, ¿hay alguna implicación (por ejemplo, seguridad/permisos, rendimiento, etc.) de hacer esto?
¿Por qué no podemos simplemente ejecutar el mismo guión de inicio
postgresql
en la configuración del Supervisor? En cambio, como se muestra en el enlace de arriba, ejecutapostmaster
?
ACTUALIZACIÓN:
Gracias a las sugerencias útiles de ambas respuestas a continuación, he fijado un guión para Supervisor para invocar PostgreSQL directamente:
#!/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"
También establecer la configuración: /etc/postgresql/9.1/main/start.conf
a manual
para que PostgreSQL no se inicie automáticamente al arrancar (sin embargo, no está claro si esta configuración está cargada). Y luego configuración que la configuración Supervisor de Postgres como:
[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
Así que ahora, puede empezar a PostgreSQL en supervisorctl
haciendo start postgres
, que funciona muy bien. Sin embargo, después de emitir stop postgres
, aunque supervisorctl
declara que el postgres está detenido, aparentemente el servidor todavía se está ejecutando como puedo psql en él.
Me pregunto si esto es un problema de configuración del Supervisor, o un problema de PostgreSQL. Cualquier sugerencia bienvenida!
gracias por su punto en mi segunda pregunta, eso fue bien explicado! En relación con mi primera pregunta (y tu interpretación de lo que realmente sucede con el guión en el enlace), ¿estás sugiriendo que deba escribir un guión que cree el directorio necesario para postgresql y luego ejecute 'postmaster' (o' postgres'?) con la configuración de postgresql original, y llame a este script en su lugar en el archivo de configuración del Supervisor? – MLister
Correcto, puede tener un script de shell que básicamente hace '[-d/run/postgresql] || make_rundir; exec /usr/lib/postgresql/9.1/postgres "$ @" 'que creará el directorio si es necesario, luego encadena el ejecutable' postgres' ('postmaster' es un nombre obsoleto ahora). Con supervise, esto literalmente se habría llamado 'ejecutar' dentro del directorio del servicio. – araqnid
Su suposición de que 'supervisord' funciona igual que' supervise' es correcta; comenzará y reaparecerá un subproceso para daemons bajo su responsabilidad. –