Ubuntu

用於 postgresql 實例的單獨 systemd 腳本

  • April 7, 2019

我通過 apt-get 在 Ubuntu 18.04 上安裝了 PostgreSQL-11,基於這裡,我設法在埠 5432 和 5433 上安裝了 2 個 postgreSQL 實例。

我的問題是,我可以為這兩個實例設置單獨的啟停腳本嗎?作為我在 Centos 7 上執行 postgresql 9.6 的另一台伺服器,有幾個啟動腳本是:

postgresql-9.6-instanceA.service postgresql-9.6-instanceB.service postgresql-9.6-instanceC.service postgresql-9.6-instanceD.service postgresql-9.6-instanceE.service

這些文件僅在環境中有所不同(注意環境部分):

[root@root]# cat /etc/systemd/system/postgresql-9.6-instanceA.service
# It's not recommended to modify this file in-place, because it will be
# overwritten during package upgrades.  If you want to customize, the
# best way is to create a file "/etc/systemd/system/postgresql-9.6.service",
# containing
#       .include /lib/systemd/system/postgresql-9.6.service
#       ...make your changes here...
# For more info about custom unit files, see
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F

# Note: changing PGDATA will typically require adjusting SELinux
# configuration as well.

# Note: do not use a PGDATA pathname containing spaces, or you will
# break postgresql-setup.
[Unit]
Description=PostgreSQL 9.6 database server
Documentation=https://www.postgresql.org/docs/9.6/static/
After=syslog.target
After=network.target

[Service]
Type=notify

User=postgres
Group=postgres

# Note: avoid inserting whitespace in these Environment= lines, or you may
# break postgresql-setup.

# Location of database directory
Environment=PGDATA=/var/lib/pgsql/instanceA/9.6/data

# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir ${PGDATA}
ExecStart=/usr/pgsql-9.6/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT


# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0

[Install]
WantedBy=multi-user.target

根據我在這裡閱讀的內容,如果從源安裝可以創建上面的腳本,因此我們需要添加 systemd 單元文件。

這些是我的 ubuntu 伺服器上 systemd 腳本的內容。以下是postgresql.service我的 ubuntu 18.04 上的文件:第一個是/var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/postgresql.service,它是空的:

root@hostname:~# ls -lah /var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/postgresql.service
-rw-r--r-- 1 root root 0 Feb 25 03:50 /var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/postgresql.service

第二個和第三個文件內容相同:

/etc/systemd/system/multi-user.target.wants/postgresql.service /lib/systemd/system/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

再說一次,我的 ubuntu 伺服器會出現這種情況嗎?這樣我就可以為我的兩個 postgres 實例設置 start-stop-reload-restart 腳本,因為我不確定要編輯的位置或文件。

自 2014 年以來,Debian 的打包已經為您執行此操作。根據您在 中的配置文件/etc/postgresql/,systemd 單元生成器會自動創建和啟用單元。postgresql@*instance*.service

這在您的系統上的自述文件中記錄在/usr/share/doc/postgresql-common/. 閱讀該目錄以及該目錄中的所有其他文件。

進一步閱讀

在 askubuntu.com 上找到了答案

事實證明,我需要.service在 postgres 安裝後和使用命令創建新實例(在本例中為 postgres 集群)後手動指定腳本:

systemctl enable postgresql@<postgresversion>-<clustername>.service

所以它將是:

systemctl enable postgresql@11-instanceA

引用自:https://unix.stackexchange.com/questions/502788