Назад | Перейти на главную страницу

postgresql - Как деамонизировать серверный процесс postgres для обычного пользователя

Я пытаюсь настроить кластер PostgreSQL в моем домашнем каталоге Debian.

РЕДАКТИРОВАТЬ: Есть несколько причин, по которым я считаю это хорошей идеей:

Я создал кластер и могу успешно запустить сервер, но не могу его демонизировать.

Вот как я создал кластер с помощью специальной команды оболочки Debian:

$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_createcluster -u user -d /home/user/.local/var/lib/postgresql -s /home/user/.local/var/run/postgresql -l /home/user/.local/var/log/postgresql -p 5434 --start-conf manual --locale en_GB.UTF-8 9.5 mycluster
install: cannot change owner and permissions of ‘/home/user/.local/etc/postgresql/9.5’: Operation not permitted
Creating new cluster 9.5/mycluster ...
  config /home/user/.local/etc/postgresql/9.5/mycluster
  data   /home/user/.local/var/lib/postgresql
  locale en_GB.UTF-8
  socket /home/user/.local/var/run/postgresql
  port   5434
Warning: The parent /var/run/postgresql of the selected
stats_temp_directory is not writable for the cluster owner. Not adding this
setting in postgresql.conf.

(Я вручную добавил stats_temp_directory вариант.)

Теперь я могу запустить кластер следующим образом (опять же, с помощью команды оболочки Debian):

$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_ctlcluster --foreground 9.5 mycluster start

И он запускается, и я вижу сообщения журнала в своей консоли, и я могу использовать createdb и psql (если я установил файл сокета с -h и порт с -p, что нормально).

Но я не могу начать без --foregound вариант. Он ждет некоторое время, а затем говорит:

The PostgreSQL server failed to start. Please check the log output:

Я пробовал установить файл журнала, как это:

$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_ctlcluster -o '-r /home/user/.local/var/log/postgresql/server.log' 9.5 mycluster start

А вот так:

$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_ctlcluster 9.5 mycluster start -- -l /home/user/.local/var/log/postgresql/server.log

Но я все равно получаю тот же результат. И файл журнала не создается.

В вашем случае может быть проще обойти оболочки Debian / Ubuntu для postgres.

Как насчет инициализации и запуска частного кластера postgres с помощью:

$ mkdir $HOME/pg

$ /usr/lib/postgresql/9.5/bin/initdb -D $HOME/pg

$ vi $HOME/pg/postgresql.conf
#  change `port` and `unix_socket_directories`, for example:
port= 5495
unix_socket_directories = '/tmp' 

# start the server, will run in background and processes belonging to $USER
$ /usr/lib/postgresql/9.5/bin/pg_ctl -D $HOME/pg -l /path/to/logfile start

# use it (initdb has already created a superuser from your $USER name)
$ psql -p 5495 -h/tmp -d postgres

# stop the server    
$ /usr/lib/postgresql/9.5/bin/pg_ctl -D $HOME/pg -l /path/to/logfile stop