postgresql.service по сравнению с postgresql@.service под/lib/systemd/system

Я работаю над Ubuntu 16.04 и смущен в postgresql сервисных файлах.

Я установил postgresql deb пакет от repo, и он дал мне 3 файла для запуска сервиса:-/etc/init.d/postgresql-/lib/systemd/system/postgresql.service-/lib/systemd/system/postgresql. сервис

Я пытался погуглить для понимания различий между ними. До настоящего времени только вещь, которую я изучил, состоит в том, что init.d был старым методом запуска сервисов, в то время как systemd является новым

Таким образом в моем случае, когда я вызываю следующее, что заставляет сервис запуститься?

# service postgresql start

Я пытался добавить выход 0 в функции запуска init.d, но тем не менее сервис запускается. Так, чтобы сценарий был избыточен?

Я должен изменить некоторые конфигурации в вызове запуска сервиса и не знаю, должен ли я внести изменение в .service файле или .service файл

Содержание .service файла:

# cat /lib/systemd/system/postgresql.service

[Unit]
 Description=PostgreSQL RDBMS

[Service]
 Type=oneshot
 ExecStart=/bin/true
 ExecReload=/bin/true
 RemainAfterExit=on

[Install]
 WantedBy=multi-user.target

Для чего/bin/true? Фактический код для запуска сервиса появляется в .service файл

Который используется когда?

Это полностью сбивает с толку меня :(

2
задан 16 February 2017 в 11:55

1 ответ

Добро пожаловать для Выяснения у Ubuntu.

на Ubuntu было 3 init системы. Новые системы являются назад совместимыми, но старыми системами, не прямо совместимы.

проекты программного обеспечения часто сценарии пакета для нескольких init систем, так как они могут работать на нескольких системах. Ubuntu в свою очередь устанавливает несколько стилей init файлов, даже при том, что они все не используются, который имеет место здесь.

init.d файл, который Вы нашли, является самым старым стилем init сценария, "SysvInit".

"сервисная" команда, которую Вы нашли, используется и для "SysVinit" и для "Выскочки" init сценарии, но в находящейся в systemd системе, звонит для использования его, эффективно перенаправляются к systemd-эквивалентным командам, который является, почему изменение "init.d" сценария не имело никакого эффекта.

postgresql.service файл, который Вы нашли, там, можно справиться с виртуальным "postgresql" сервисом, который запустится и остановится весь услуги PostgreSQL одновременно, не упоминая конкретную версию. Вы видите подсказки того, для чего файл в ".service" файл, который Вы нашли:

PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

Это походит на плохое использование .service файл. Используя .target единица является более естественным способом группироваться набор сервисов. Можно проверить man systemd.directives для нахождения записей документа для всех этих директив, если Вы хотите понять их детали.

postgresql@.service файл является "шаблонным" файлом, так, чтобы несколько экземпляров PostgreSQL могли быть выполнены на том же сервере с различными версиями, но запущены и остановлены последовательным способом. Это - файл, чтобы сфокусироваться на. Как комментарий в файле предполагает, можно использовать его для запуска конкретной версии PostgreSQL, как:

 systemctl start postgresql@9.3-main
 systemctl stop postgresql@9.3-main
 systemctl restart postgresql@9.3-main

, Конечно, у Вас на самом деле должна быть версия PostgreSQL, установленного это, Вы пытаетесь запуститься или остановиться!

Так, установка PostgreSQL systemd позволяет Вам, запускаются или останавливаются весь кластеры PostgreSQL сразу, или останавливают и запускают конкретный кластер.

Для Вашего использования, сфокусируйтесь на systemd .service файлы и systemctl сервисная команда. Нет никакой потребности использовать init.d или service команды, когда systemd .service файлы обеспечиваются.

См. Также: SysV, Выскочка и systemd init сосуществование сценария .

2
ответ дан 2 December 2019 в 03:42

Другие вопросы по тегам:

Похожие вопросы: