Нужна нативная поддержка systemd в пакете postgresql.
http://git.altlinux.org/people/vitty/packages/postgresql9.1.git?p=postgresql9.1.git;a=commit;h=3aa59d5b519607e6c90a27c89ae0db6ef8de3a18 Если майнтейнеры postgres не против, то я готов собрать этот коммит в Сизиф.
У нас, собственно, пакеты postgresql9.0-server и postgresql9.1-server, перевешиваю на 9.1
Created attachment 5460 [details] postgresql.service
Created attachment 5461 [details] postgresql-chrooted.service
Предлагаю два service-файла, для postgreasql в chroot и без. to vitty: комит посмотрел: - StandardOutput=syslog - стоит ли переопределять обще-системный? может я только journal использую - "postgres -C $PG_CHROOT_DIR" - это только для postgresql в chroot? что будет если $PG_CHROOT_DIR пустой? (я просто не знаю, поэтому и спрашиваю) - а нужен ли postgresql-init-db? автоматической инициализации базы данных нет и в старом postgresql(когда-то давно была,хорошо что сейчас нет). Всё равно человек будет запускать initdb, поэтому можно запустить /etc/init.d/postgresql initdb. У нас это сработает, а в федоре нет - там /etc/init.d/functions не дадут это сделать под systemd.
Сам postges не форкается, следовательно Type=forking не подходит. Остановка сервера, через pg_ctl тоже через посылку KILL сигнала, следовательно можно убрать эту операцию и доверить остановку самому systemd. В общем, больше подробностей у ldv@ и vitty@, пару часов тестировали юнит и пришли к тому виду, который у vitty@.
(В ответ на комментарий №5) > Предлагаю два service-файла, для postgreasql в chroot и без. > > to vitty: комит посмотрел: > - StandardOutput=syslog - стоит ли переопределять обще-системный? может я > только journal использую Да, наверное не стоит. > - "postgres -C $PG_CHROOT_DIR" - это только для postgresql в chroot? что будет > если $PG_CHROOT_DIR пустой? (я просто не знаю, поэтому и спрашиваю) Я как-то не подумал о работа postgres не в chroot. Он у нас так работает? > - а нужен ли postgresql-init-db? автоматической инициализации базы данных нет и > в старом postgresql(когда-то давно была,хорошо что сейчас нет). Всё равно > человек будет запускать initdb, поэтому можно запустить /etc/init.d/postgresql > initdb. У нас это сработает, а в федоре нет - там /etc/init.d/functions не > дадут это сделать под systemd. Мне показалось, что людям будет крайне неочевидно делать /etc/init.d/postgresql initdb, не догадаются (причём service postgresql initdb не сработает), поэтому я и вынес отдельный скрипт. Но я, разумеется, не настаиваю, мне просто показалось так логичнее.
(В ответ на комментарий №7) > (В ответ на комментарий №5) > > Предлагаю два service-файла, для postgreasql в chroot и без. > > > > to vitty: комит посмотрел: > > - StandardOutput=syslog - стоит ли переопределять обще-системный? может я > > только journal использую > > Да, наверное не стоит. Т.к. всё равно весь вывод в итоге попадёт в syslog, если он присутствует. > > - "postgres -C $PG_CHROOT_DIR" - это только для postgresql в chroot? что будет > > если $PG_CHROOT_DIR пустой? (я просто не знаю, поэтому и спрашиваю) > > Я как-то не подумал о работа postgres не в chroot. Он у нас так работает? > Вроде у нас postgres в чруте по умолчанию? Стоит остановиться на одном варианте дистрибутивного исполнения, т.к. тем у кого postgres будет настроен по другому или выведен и чрута, есть /etc/systemd/system Ну и для проверки чрута: ConditionDirectoryNotEmpty= > > - а нужен ли postgresql-init-db? автоматической инициализации базы данных нет и > > в старом postgresql(когда-то давно была,хорошо что сейчас нет). Всё равно > > человек будет запускать initdb, поэтому можно запустить /etc/init.d/postgresql > > initdb. У нас это сработает, а в федоре нет - там /etc/init.d/functions не > > дадут это сделать под systemd. > > Мне показалось, что людям будет крайне неочевидно делать /etc/init.d/postgresql > initdb, не догадаются (причём service postgresql initdb не сработает), поэтому > я и вынес отдельный скрипт. Но я, разумеется, не настаиваю, мне просто > показалось так логичнее. Если писать юнит для postgres, то так что бы для работы сервиса не надо было использовать части от init. Для initdb, если хочется использовать отдельный запуск, можно отдельный юнит сделать с Requires на potgres.
Во всех текущих ветках PG postgresql.service в наличии.