Как отцепить PostgreSQL от окна Cygwin?

rihad
Дата: 07.06.2003 18:31:48
Запускаю ipc-daemon - все нормально, Cygwin можно закрывать, ipc-daemon останется висеть. Но если потом запущу
$ postmaster &
или
$ pg_ctl start
то Cygwin не закрывается, а если убить, то помрет и postgres.
$ ps
[code]
PID PPID PGID WINPID TTY UID STIME COMMAND
288 1 348 220 con 1003 18:44:11 /usr/local/bin/ipc-daemon
1644 1 1644 1644 con 1003 19:12:12 /usr/bin/bash
1368 1644 1644 808 con 1003 19:12:12 /usr/bin/postgres
1172 1368 1644 1172 con 1003 19:12:15 /usr/bin/postgres
1976 1172 1644 1976 con 1003 19:12:15 /usr/bin/postgres
[/code]
Видимо дело в том, что postgres дочерний процесс bash'а (в отличие от ipc-daemon) вот думаю надо как-то reparent'нуть postgres на PID 1 чтобы получилось. Что интересно, ipc-daemon я как-то по особому не запускал, просто ipc-daemon & и все.

Помогите! :)
rihad
Дата: 07.06.2003 18:39:42
Немного докопался, в том смысле что PPID 1 бывает когда из .bash_profile выполняются проги. А когда на командной строке, то бывает PPID bash'а.

вот мой .bash_profile
export PGDATA=/var/pg
/usr/local/bin/ipc-daemon &
pg_ctl start

$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
1216 1 1216 1632 con 1003 19:36:07 /usr/local/bin/ipc-daemon
592 1 592 592 con 1003 19:37:53 /usr/bin/bash
1384 1 592 1384 con 1003 19:37:53 /usr/bin/postgres
1540 1384 592 1540 con 1003 19:37:56 /usr/bin/postgres
540 1540 592 540 con 1003 19:37:56 /usr/bin/postgres

Все равно окно Cygwin не закрывается не убив postgres :(
Daniel Podolsky
Дата: 09.06.2003 06:12:14
Я надеюсь, вы его под NT запускаете? :)

Тогда - запускайте его как сервис:
cygrunsrv -I PostgreSQL -p /usr/bin/postmaster -a "-D /usr/local/pgsql/data -i -d 5" -y ipc-daemon -s INT -o

net start PostgreSQL
rihad
Дата: 09.06.2003 22:43:58
Работаю из под Winxp. Спасибо за cygrunsrv. Но все равно не получается :(

$ cygrunsrv -I ipc -p /usr/local/bin/ipc-daemon -o
$ cygrunsrv -I PostgreSQL -p /bin/postmaster -y ipc -s INT -o -e PGDATA=$PGDATA
$ net start postgresql

Первый сервис нормально создается и функционирует. А вот второй при старте выдает в логе (/var/log/postgresql.log):

LOG: FindExec: invalid binary "/bin/postgres"
FATAL: /bin/postmaster: could not locate executable, bailing out...

Я пробовал всевозможные формы -p, вплоть до /cygdrive/c/cygwin/... - безуспешно.

Кстати, чтобы postmaster мог писАть в свои файлы из под юзера SYSTEM, я весь кластер сделал chmod 0777 . -R. Это нормально? А то с ключом -u были проблемы - никак сервис не хотел мириться с тем, что у моего основного юзера-админа нет пароля. А при попытке создать отдельный limited аккаунт postgres, chown впоследствии не признавала существования такого юзера.
Daniel Podolsky
Дата: 10.06.2003 18:46:46
LOG: FindExec: invalid binary "/bin/postgres"
FATAL: /bin/postmaster: could not locate executable, bailing out...

Это - беда с линками. Я, помнится, просто скопировал /bin/postgres во все те имена, что на него ссылались.

Кстати, чтобы postmaster мог писАть в свои файлы из под юзера SYSTEM, я весь кластер сделал chmod 0777 . -R.
Я делал так:
bash -c "mkdir -p /usr/local/pgsql/data"

bash -c "initdb $USERNAME -D /usr/local/pgsql/data"
chmod -R g+rw /usr/local/pgsql/data
chown -R SYSTEM:Administrators /usr/local/pgsql/data