우분투 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 인스턴스에 적용됩니다.restart
reload
postgresql
답변2
적어도 최신 버전의 postgres에는 시스템 생성기 스크립트가 있습니다.
/lib/systemd/system-generators/postgresql-generator
값이 "auto"인 모든 postgresql 인스턴스가 시작됩니다.
/etc/postgresql/VERSION/main/start.conf
구성. 따라서 심볼릭 링크 systemctl enable
등을 통해 이러한 기능을 수동으로 활성화할 필요가 없습니다 . 부팅 모드를 변경 start.conf
하고 실행 하면 됩니다 systemctl daemon-reload
.