Я хочу запустить 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? Любое предложение приветствуется!