我正在使用 Postgresql 10,在安装数据库后,我将其放入PGOPTS="-i"
此文件/etc/sysconfig/pgsql/postgresql
中,以便 Postgresql 可以监听所有接口。
当我使用 CentOS 6 时,这有效并且 postgresql 以-i
命令行中的选项启动。
但是,我需要将数据库迁移到 CentOS 7,而 postgresql(现在它开始使用postmaster
而不是postgres
)不会使用该选项启动。
我知道在 EL7 中,systemd
使用了并且可能无法读取 sysconfig 目录中的文件。但是,我在哪里可以设置这个变量呢?
我也在考虑将此变量设置为新文件。当我使用 Ansible 时,我需要有一个具有此配置的新文件。这意味着我不想编辑现有的文件,比如postgres.conf
放在数据库安装目录中的文件。只有在没有任何其他选项可以在某处设置 PGOPTS 变量的情况下,才会这样做。
我努力了:
/usr/lib/systemd/system/postgresql.service.d/postgresql.conf
在组内有以下内容[Service]
:Environment=PGOPTS=-i
. 我可以看到目录被读取(并且其他变量被读取 - 如 PGDATA - 但它没有读取 PGOPTS 或者至少 postmaster 进程没有使用该选项启动);为此,我也尝试过设置,但/usr/lib/systemd/system/postgresql.service
没有成功;/etc/conf.d/postgresql
但是,正如我在某处读到的那样,它不再被使用了;/etc/profile.d/postgresql.sh
设置和导出变量;~postgres/.bash-profile
设置和导出变量;
您在 systemd Environment=设置的正确轨道上。(另一方面,服务启动过程不涉及用户 shell 和交互式登录等任何内容,因此“配置文件”文件绝对无关紧要。)
但问题是 PostgreSQL 守护进程不使用并且从来没有首先使用过这个环境变量。实际软件中没有任何东西可以使 $PGOPTS 的内容神奇地附加到守护程序的命令行。
所说的魔法过去是在旧的启动脚本中完成的(
/etc/rc.d/init.d/postgresql
在 systemd 之前被 RedHat/CentOS 使用)——它实际上并没有用作“环境”变量,而是作为“postgres”命令行中的直接替代:那么在哪里添加
-i
命令行选项,如果不是 $PGOPTS?当然,将它直接添加到“postgres”命令行。完整的命令行在ExecStart=中为 systemd 的 postgresql.service 指定;你可以看到它仍然保留了一些替换,但你也可以直接添加自定义选项:将此更改为:
注意:不要在 /usr/lib 中编辑 systemd 单元;相反,将单元文件复制到 /etc/systemd/system 并编辑您的副本,这样您的更改就不会在包升级期间丢失。
postmaster(1) 手册页说: