Я хочу запустить PostgreSQL 9.1 с помощью Supervisor на Ubuntu 10.04. На данный момент я вручную запускаю PostgreSQL с помощью сценария инициализации:
/etc/init.d/postgresql start
Согласно этому посту: http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/, Мне нужно изменить конфигурацию PostgreSQL, чтобы она работала на порту TCP вместо сокета Unix, чтобы PostgreSQL работал с Supervisor.
У меня есть два вопроса относительно этого подхода:
Учитывая, что это больше похоже на взлом, есть ли какие-либо последствия (например, безопасность/разрешения, производительность и т. д.) для этого?
Почему мы не можем просто запустить тот же сценарий инициализации postgresql
в конфигурации супервизора? Вместо этого, как показано в приведенной выше ссылке, он запускает postmaster
?
ОБНОВЛЕНИЕ:
Благодаря полезным предложениям из обоих приведенных ниже ответов я настроил сценарий для Supervisor для прямого вызова PostgreSQL:
#!/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"
Я также установил конфигурацию: /etc/postgresql/ 9.1/main/start.conf
на manual
, чтобы PostgreSQL не запускался автоматически при загрузке (впрочем, мне непонятно, загружается ли этот конфиг). Затем я настраиваю конфигурацию Supervisor для postgres следующим образом:
[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
Итак, теперь я могу запустить PostgreSQL в supervisorctl
, выполнив start postgres
, что работает нормально.Однако после того, как я выдал команду stop postgres
, несмотря на то, что supervisorctl
объявляет, что postgres остановлен, сервер, по-видимому, все еще работает, так как я могу подключиться к нему с помощью psql.
Интересно, проблема в конфигурации Supervisor или в PostgreSQL? Любое предложение приветствуется!