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

Установка PostgreSQL из исходного кода в дистрибутив systemd

На моем текущем сервере у меня установлены 2 версии postgresql: postgresql-9.1 и postgresql-9.2.

Я установил их из исходников с сайта postgresql.

Папка tar.gz содержит файлы установки, а также сценарии запуска, которые можно использовать для ее запуска. Я скопировал эти стартовые скрипты из каждой установки postgresql как

/etc/rc.d/init.d/postgresql91
/etc/rc.d/init.d/postgresql92

так, чтобы я смог

service postgresql91 start

или

service postgresql92 start

и использовать их независимо

Однако я пытаюсь сделать то же самое на systemd linux (сервер Fedora 22), и в папке init.d было предупреждение, сообщающее мне, что оно изменилось.

Как я смогу использовать стартовые скрипты, предоставляемые postgresql, для запуска базы данных?

Этот набор шагов сработал для меня на виртуальной машине Fedora 22. Надеюсь, они работают и на вас. =) Первым исправил 9.2. 9.1 работал точно так же.

К счастью, сценарий инициализации, включенный в исходные версии PostgreSQL, полностью совместим с LSB, что в значительной степени является требованием для интеграции с устаревшей системой systemd.

Ваш первый шаг должен состоять в правильной настройке сценария инициализации в contrib/start-scripts/linux для вашей конкретной настройки среды.

Как только это будет завершено, скопируйте отредактированный файл в /etc/rc.d/init.d/postgresql92, и выполните команду systemctl daemon-reload чтобы заставить systemd перечитать файлы модуля и каталоги, содержащие файлы.

Сразу после этого запустите команду systemctl enable postgresql92. Как только это будет сделано, вы должны увидеть такое сообщение:

[root@test ~]# systemctl enable postgresql92
postgresql92.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig postgresql92 on
[root@test ~]#

Это означает, что systemd действительно зарегистрировал сценарий инициализации и создал все необходимые символические ссылки для запуска при загрузке.

После этого вы сможете запустить службу с помощью systemctl start postgresql92

А затем проверьте статус процесса с помощью systemctl status postgresql92

Это должно выглядеть примерно так:

[root@test ~]# systemctl status postgresql92
● postgresql92.service - SYSV: PostgreSQL RDBMS
   Loaded: loaded (/etc/rc.d/init.d/postgresql92)
   Active: active (exited) since Sat 2015-09-05 08:13:34 UTC; 1min 31s ago
     Docs: man:systemd-sysv-generator(8)
   Process: 16665 ExecStart=/etc/rc.d/init.d/postgresql92 start (code=exited, status=0/SUCCESS)

Sep 05 08:13:34 test systemd[1]: Starting SYSV: PostgreSQL RDBMS...
Sep 05 08:13:34 test su[16666]: (to postgresql) root on none
Sep 05 08:13:34 test systemd[1]: Started SYSV: PostgreSQL RDBMS.
Sep 05 08:13:34 test postgresql92[16665]: Starting PostgreSQL: ok
[root@test ~]#

И, наконец, перепроверьте, используя psql на работающем экземпляре.

[postgresql@test bin]$ ./psql -U postgresql template1
psql (9.2.13)
Type "help" for help.

template1=# SELECT * FROM version();
                                                version                                                    
---------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.2.13 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 5.1.1 20150618 (Red Hat 5.1.1-4), 64-bit
(1 row)

template1=# \q
[postgresql@test bin]$

В Шпаргалка от SysVinit к systemd, то Совместимость с SysV, и ArchLinux Wiki systemd Запись должна помочь вам понять, как лучше разобраться с systemd.

Надеюсь, это поможет. знак равно