`systemctl disable --now postgresql` 不会停止守护进程

`systemctl disable --now postgresql` 不会停止守护进程

我正在从 apt.postgresql.org 运行 Debian Stretch 和 PostgreSQL 10。当我这样做时:

postgresql disable --now postgresql

数据库服务器没有停止。它显示:

Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install.                                                                                                
Executing: /lib/systemd/systemd-sysv-install disable postgresql                                      
insserv: warning: current start runlevel(s) (empty) of script `postgresql' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `postgresql' overrides LSB defaults (0 1 6).

但这可能并不那么重要。

systemctl disable --now postgresql@10-main可以完成工作,但我对postgresql单元感到好奇。它的startstoprestartreload任务运行良好。

我是不是漏掉了什么?这是 的一个错误或限制吗systemd?或者是 PostgreSQL 包的一个错误或限制?

现在我仔细研究了一下,发现它systemctl disable postgresql并不能阻止 PostgreSQL 在启动时启动。我不想被绑定到某个特定版本。我以为停止和禁用 PostgreSQL 只是做一件事systemctl disable --now postgresql。但事实证明我必须这样做:

systemctl list-units 'postgresql*' \
    | grep ^postgresql \
    | awk '{print $1}' \
    | xargs -r -I{} -d\\n systemctl disable --now {}

由于某些神秘的原因,即使这样也并不总是有效。我有一个数据目录的副本用于测试目的。然后在脚本中我将数据库恢复到初始状态(stop、rm、cp、start)。之后我尝试停止并禁用 pg,如上所述。它被禁用了,但没有停止。我可以看到在命令之前运行的所有进程,我可以看到:

database system is ready to accept connections

在日志中(据说已经完全启动)。但就是启动不了。所以现在我这样做:

systemctl stop postgresql
systemctl list-units ... | xargs ... systemctl disable {}

来自手册页

--now 与 enable 一起使用时,单元也会启动。与 disable 或 mask 一起使用时,单元也会停止。仅当相应的 enable 或 disable 操作成功后,才会执行启动或停止操作。

相关内容