Si desidera eseguire PostgreSQL 9.1 utilizzando Supervisor su Ubuntu 10.04. Al momento, mi metto manualmente PostgreSQL utilizzando lo script di init:Esecuzione di PostgreSQL con Supervisord
/etc/init.d/postgresql start
Secondo questo post: http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/, ho bisogno di modificare la configurazione di PostgreSQL per farlo funzionare sulla porta TCP invece di socket Unix, al fine di rendere PostgreSQL funziona con Supervisor.
Ho due domande riguardanti questo approccio:
considerando questo è più di hack, c'è qualche implicazione (ad esempio sicurezza/permessi, prestazioni, ecc) di fare questo?
Perché non è possibile eseguire lo stesso script di init
postgresql
in Supervisor config? Invece, come mostrato nel link sopra, correpostmaster
?
UPDATE:
grazie ai suggerimenti utili da entrambe le risposte di seguito, Ho installato uno script per il Supervisore per invocare PostgreSQL direttamente:
#!/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"
Ho anche impostare la configurazione: /etc/postgresql/9.1/main/start.conf
a manual
in modo che PostgreSQL non si avvii automaticamente all'avvio (tuttavia, non mi è chiaro se questa configurazione è stata caricata). E poi ho la messa a punto di configurazione Supervisor per Postgres come:
[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
Così ora, posso iniziare a PostgreSQL supervisorctl
facendo start postgres
, che funziona bene. Tuttavia, dopo l'emissione di stop postgres
, sebbene supervisorctl
dichiari l'arresto di postgres, apparentemente il server è ancora in esecuzione poiché posso inserirlo in psql.
Mi chiedo se si tratta di un problema di configurazione Supervisor o di un problema PostgreSQL. Qualsiasi suggerimento benvenuto!
grazie per voi punto sulla mia seconda domanda, che è stato ben spiegato! In relazione alla mia prima domanda (e alla tua interpretazione di ciò che effettivamente accade con lo script nel link), stai suggerendo che dovrei scrivere uno script che crei la directory necessaria per postgresql e poi esegua 'postmaster' (o' postgres'?) con la configurazione postgresql originale e chiama questo script invece nel file di configurazione Supervisor? – MLister
Esatto, puoi avere uno script di shell che fondamentalmente fa '[-d/run/postgresql] || make_rundir; exec /usr/lib/postgresql/9.1/postgres "$ @" 'che creerà la directory se necessario, quindi concatena l'eseguibile' postgres' ('postmaster' è ora un nome obsoleto). Con supervisione, questo sarebbe stato letteralmente chiamato 'run' all'interno della directory dei servizi. – araqnid
L'ipotesi che 'supervisord' funzioni come' supervise' è corretta; inizierà e respawn un sottoprocesso per demoni sotto la sua responsabilità. –