postgresql.service는 시작할 postgresql 인스턴스를 어떻게 알 수 있나요?

postgresql.service는 시작할 postgresql 인스턴스를 어떻게 알 수 있나요?

우분투 16.04에 postgres 9.5 를 설치했고 postgresql.service.[email protected]

활성화된 모든 postgres 인스턴스가 생성되고 다음을 postgresql.service사용하여 특정 인스턴스를 호출할 수 있지만 이는 템플릿 파일이며 인스턴스 문자열(템플릿에서 %i 또는 %I로 표시됨)이 전달되는 위치가 표시되지 않습니다. [email protected][email protected]postgresql.service

어떤 인스턴스가 활성화되어 있는지 어떻게 확인 postgresql.service하고 이를 systemd 템플릿 파일에 전달합니까?

답변1

이 질문에 대답하려면 먼저 두 관련 파일의 내용을 조사하십시오. 파일을 어디서 찾을 수 있는지 확실하지 않은 경우 패키지 내용에서 파일을 검색할 수 있습니다 systemd.

 dpkg -L postgresql-common| grep systemd

파일을 보면 postgresql.service별로 많은 일을 하고 있지 않다는 것을 알 수 있습니다.

# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.

[Unit]
Description=PostgreSQL RDBMS

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

[Install]
WantedBy=multi-user.target

의견을 통해 우리는 이 파일이 시스템 "대상"으로 사용된다는 것을 알고 있습니다. 템플릿 파일로 이동합니다.

# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql@version-cluster", e.g. "[email protected]". The
# variable %i expands to "version-cluster", %I expands to "version/cluster".
# (%I breaks for cluster names containing dashes.)

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

[Service]
Type=forking
# @: use "postgresql@%i" as process name
ExecStart=@/usr/bin/pg_ctlcluster postgresql@%i --skip-systemctl-redirect %i start
ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop
ExecReload=/usr/bin/pg_ctlcluster --skip-systemctl-redirect %i reload
PIDFile=/var/run/postgresql/%i.pid
SyslogIdentifier=postgresql@%i
# prevent OOM killer from choosing the postmaster (individual backends will
# reset the score to 0)
OOMScoreAdjust=-900
# restarting automatically will prevent "pg_ctlcluster ... stop" from working,
# so we disable it here. Also, the postmaster will restart by itself on most
# problems anyway, so it is questionable if one wants to enable external
# automatic restarts.
#Restart=on-failure
# (This should make pg_ctlcluster stop work, but doesn't:)
#RestartPreventExitStatus=SIGINT SIGTERM

[Install]
WantedBy=multi-user.target

흥미로운 지침은 다음과 같습니다.

PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service

systemd지시문에 대한 문서를 어디서 찾을 수 있는지 확실하지 않은 경우 다음을 확인하세요 man systemd.directives. 거기에서 우리는 이 두 가지 명령을 에서 찾을 수 있습니다 man systemd.unit.

서비스를 활성화하면 가장 큰 리드가 나타납니다.

sudo systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].

함께 넣어보세요:

  • systemd서버가 시작될 때 심볼릭 링크가 PostgreSQL 9.6을 시작하는 방법을 아는 방법 .
  • PartOf=및 지시문은 ReloadPropagatedFrom=서비스에서 보장되며 stop궁극적으로 start설치된 모든 관련 PostgreSQL 인스턴스에 적용됩니다.restartreloadpostgresql

답변2

적어도 최신 버전의 postgres에는 시스템 생성기 스크립트가 있습니다.

/lib/systemd/system-generators/postgresql-generator

값이 "auto"인 모든 postgresql 인스턴스가 시작됩니다.

/etc/postgresql/VERSION/main/start.conf

구성. 따라서 심볼릭 링크 systemctl enable등을 통해 이러한 기능을 수동으로 활성화할 필요가 없습니다 . 부팅 모드를 변경 start.conf하고 실행 하면 됩니다 systemctl daemon-reload.

관련 정보