用於 postgresql 實例的單獨 systemd 腳本
我通過 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/
. 閱讀該目錄以及該目錄中的所有其他文件。進一步閱讀
- 克里斯托夫·伯格 (2014-07-18)。
README.systemd
. 德比安。- https://unix.stackexchange.com/a/409689/5132
事實證明,我需要
.service
在 postgres 安裝後和使用命令創建新實例(在本例中為 postgres 集群)後手動指定腳本:
systemctl enable postgresql@<postgresversion>-<clustername>.service
所以它將是:
systemctl enable postgresql@11-instanceA