Я работаю над 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 файл
Который используется когда?
Это полностью сбивает с толку меня :(
Добро пожаловать для Выяснения у 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 сосуществование сценария .