进一步阅读

进一步阅读

我通过 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 脚本,因为我不确定要编辑的位置或文件。

答案1

自 2014 年以来,Debian 的软件包就已经为您做到了这一点。根据 中的配置文件/etc/postgresql/,systemd 单元生成器会自动创建并启用单元。postgresql@instance.service

这在您的系统上的自述文件中进行了记录/usr/share/doc/postgresql-common/。阅读该目录以及该目录中的所有其他 doco。

进一步阅读

答案2

我找到了答案这里是askubuntu.com

事实证明,我需要.service在安装 postgres 后并使用命令创建新实例(在本例中为 postgres 集群)后手动指定脚本:

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

所以它将是:

systemctl enable postgresql@11-instanceA

相关内容