我正在从 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
单元感到好奇。它的start
、stop
、restart
、reload
任务运行良好。
我是不是漏掉了什么?这是 的一个错误或限制吗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 操作成功后,才会执行启动或停止操作。