错误:找不到版本 11(PostgreSQL 11)的 pg_ctl 可执行文件 + 让我们加密 [关闭]

Posted

技术标签:

【中文标题】错误:找不到版本 11(PostgreSQL 11)的 pg_ctl 可执行文件 + 让我们加密 [关闭]【英文标题】:Error: Could not find pg_ctl executable for version 11 (PostgreSQL 11) + let's encrypt [closed] 【发布时间】:2020-07-07 11:24:18 【问题描述】:

我有一个域重定向到它的 VPS 主机。 我的主网站使用 WordPress CMS 有 LAMP 堆栈。 另外,我在子域中使用 Odoo 作为我的后端,使用 python 和 PostgreSQL。

一切正常,直到我按照这些教程安装了 Certbot Let's Encrypt 以获取 SSL 证书

对于我的 Wordpress,我安装了这个插件:

WP Encryption – One Click single / wildcard Free SSL certificate & force HTTPS

这让我陷入了一个循环,因为它迫使 https 我稍后会解释它

所以当插件不起作用时,我通过这些教程为整个 VPS 寻找另一种方法:

How To Secure Apache with Let's Encrypt on Ubuntu 16.04

How To Secure Apache with Let's Encrypt on Ubuntu 18.04

在完成 ubuntu 18.04 的第二个教程后,我注意到我的所有域流量都将转到 https,并且它卡在一个循环中,说和我上面说的一样

“ERR_TOO_MANY_REDIRECTS 表示网站重定向次数过多”

并且无法访问域中 wordpress 的网站前端。

然后我申请的时候

“第 3 步 - 允许 HTTPS 通过防火墙”

我的互联网连接被解释了,当我回到 ssh 会话时,我发现我自己被锁定在服务器之外并且没有找到任何重新进入的方法。

当我厌倦了使用带有 Odoo 的子域时,我遇到了同样的错误

“ERR_TOO_MANY_REDIRECTS 表示网站重定向次数过多”

直到这里我都绝望了,不知道该怎么办。

我联系了我的 VPS 服务器提供商并告诉他到底发生了什么。然后是他如何设法通过终端的 URL 再次让我进入服务器,我仍然无法使用像 putty 这样的 ssh 客户端访问服务器。所以当我在他向我提供 URL 后进入服务器时,首先注意到的是他“重新启动了 VPS”将在一秒钟内完成。

所以我做的第一件事是删除 wordpress 插件“WP Encryption”并更新 mysql 数据库中 wp_options 表中的 wordpress 站点 URL,因为该插件将其从 http 更改为 https,所以我将其改回并解决了 ERR_TOO_MANY_REDIRECTS我的 wordpress 网站。

然后我做的第二件事是禁用我在上面第 3 步教程中启用的 ufw 防火墙。

我立即使用 ssh 客户端 putty 恢复了与服务器的连接,但我再次注意到 postgres 服务处于非活动状态,并且随着 VPS 的重新启动而中断。我试图启动服务,但它没有给我这个错误。

Failed to start postgresql.service: Unit postgresql.service is masked.

我搜索了一个解决方案,发现这些命令可以取消屏蔽

sudo systemctl unmask postgresql
sudo systemctl enable postgresql
sudo systemctl restart postgresql

然后服务已经启动,当我运行状态命令时一切都正常

service postgresql status

回应是

● postgresql.service - LSB: PostgreSQL RDBMS server
   Loaded: loaded (/etc/init.d/postgresql; generated)
   Active: active (exited) since Thu 2020-03-26 05:54:09 UTC; 2h 22min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 0 (limit: 2286)
   Memory: 0B
   CGroup: /system.slice/postgresql.service

但是当我尝试使用 odoo 通过默认端口连接到 postgres 时,它说:

could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"

经过多次搜索后,我发现 posgres 主集群也处于非活动状态或关闭,我尝试使用此命令启动它

pg_ctlcluster 11 main start

但我得到了这个错误

Job for postgresql@11-main.service failed because the service did not take the steps required by its unit configuration. See "systemctl status postgresql@11-main.service" and "journalctl -xe" for details.

当我按要求运行命令时

systemctl status postgresql@11-main.service

我收到这个错误

● postgresql@11-main.service - PostgreSQL Cluster 11-main    Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)    Active: failed (Result: protocol) since Thu 2020-03-26 15:22:15 UTC; 14s ago   Process: 18930 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 11-main start (code=exited, status=1/FAILURE)

独自一人

systemd[1]: Starting PostgreSQL Cluster 11-main...
postgresql@11-main[18930]: Error: Could not find pg_ctl executable for version 11
systemd[1]: postgresql@11-main.service: Can't open PID file /run/postgresql/11-main.pid (yet?) after start: No such file or
systemd[1]: postgresql@11-main.service: Failed with result 'protocol'.
systemd[1]: Failed to start PostgreSQL Cluster 11-main.

我猜 Let's Encrypt 向 pg_hba.conf 和 postgres.conf 添加了一个 ssl 配置,就像 id 对 apache 所做的那样,所以我搜索了它们并评论了“ssl on”行并与主集群一起重新启动了 postgres 服务,但什么也没发生仍然是相同的错误是

Error: Could not find pg_ctl executable for version 11

我知道我不应该直接在 Ubuntu/Debian 下运行 pg_ctl。我必须改用 pg_ctlcluster,它由 postgresql-common 安装。我看到了主页文档。但是当我运行“sudo pg_ctlcluster 11 main reload”命令时,我总是得到上面的错误,告诉我他找不到 pg_ctl 可执行文件

我为这个问题搜索了很多,但没有任何效果如何解决版本 11 中的 pg_ctl 可执行文件??

附: 我正在使用 Ubuntu 19.10(GNU/Linux 5.3.0-24-generic x86_64) 使用 postgres 11 作为数据库的 Odoo 11 odoo 无法连接到我之前提到的 postgres

编辑: 不幸的是,我无法还原或恢复服务器来修复 postgres 包,因为我上次备份服务器是在 19/3 而今天是 26/3,我在此期间有重要数据

2020 年 3 月 27 日凌晨 4:06 更新

我将我上次的服务器备份与生产服务器进行了比较,发现很多 postgres 文件丢失了!!像 int 这个路径 /usr/lib/postgres/11/ 和 /etc/postgres/11/ 我认为 postgres 在重新启动服务器时有些损坏并丢失了一些文件 >>> 但发现数据库的数据文件位于在 /var/lib/postgres/11/

【问题讨论】:

"我猜 Let's Encrypt 在 pg_hba.conf 和 postgres.conf 中添加了一个 ssl 配置,就像 id 对 apache 所做的那样" 不,certbot 只处理 Web 配置,请参阅 certbot.eff.org/docs/…。当然,除非你有 PostgreSQL 的特定插件。但是您的问题在这里与编程无关。 @PatrickMevzek 我发现所有 postgres 文件都因服务器意外重启而损坏和丢失,所以很多二进制文件(如 pg_ctl)没有找到我不得不重新安装 postgres 并备份主集群 【参考方案1】:

尝试在您的 odoo 配置文件中添加“pg_path”。 像:pg_path = /path/to/postgresql/binaries 一般'/usr/lib/posrgresql/11/bin'是二进制目录。

【讨论】:

我发现所有 postgres 文件由于意外重启服务器而损坏和丢失,所以很多二进制文件,如 pg_ctl 没有找到我不得不重新安装 postgres 并备份主集群跨度> 【参考方案2】:

经过一个小时的挖掘,终于

所有损坏和丢失的 PostgreSQL 文件,我失去了修复它们的希望,我不知道是什么原因造成的,但这与服务器意外重启有关。

所以我设法在此路径中找到了用于生产服务器的重要数据库信息的主集群数据文件

/var/lib/postgres/11/

我通过使用此命令压缩整个文件夹从中获取了备份

zip -r main.zip main/

然后我使用来自here 的这些命令对 postgres 进行了完全清除和重新安装

apt-get --purge remove postgresql\*

从您的系统中删除所有 PostgreSQL。仅仅清除 postgres 包是不够的,因为它只是一个空的元包。

删除所有 PostgreSQL 包后,运行:

rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres

然后我用这个命令安装了 postgres 来匹配 odoo11

sudo apt-get install postgresql libpq-dev -y

然后创建 ODOO PostgreSQL 用户

sudo su - postgres -c "createuser -s odoo" 2> /dev/null || true

现在一切正常,odoo 应该可以正常工作,但您仍然没有任何数据库

因此,要从我们之前获取的集群文件夹中恢复备份,我们需要将 zip 文件移动到我们从中获取它的同一目录中

/var/lib/postgres/11/

但在此之前你应该停止 postgres 服务

sudo systemctl stop postgresql

并确保它已停止

sudo systemctl status postgresql

之后重命名 postgres 现在使用的主集群,因为它是空的,我们不需要它,因为我们正在用我们的备份集群替换它

mv /var/lib/postgres/11/main /var/lib/postgres/11/main_old

然后使用此命令将 zip 文件从您备份的位置移动到 postgres 集群文件夹

mv /backups/main.zip /var/lib/postgres/11/

使用该命令将文件夹解压到同一路径

unzip -a /var/lib/postgres/11/main.zip

解压缩文件夹后,将所有权交给您的 postgres 用户和组

chown -R postgres:postgres main

那你就可以走了。启动 Postgres 服务

sudo systemctl start postgresql
sudo systemctl status postgresql

并确保你也启动了主集群服务

pg_ctlcluster 11 main start

如果您停止了 odoo,请确保也启动它

service odoo-server start

Ps:我通过在我的 odoo.config Apache2 虚拟主机中注释 ssl 配置解决了 odoo 子域的 ERR_TOO_MANY_REDIRECTS 问题,该主机允许之前更新加密,并且在安装之前一切都回到了离开的位置让我们加密。

我想我会把它留在这里并且在我弄清楚如何在测试服务器中使用它之前不会再在生产中使用 ssl .. 感谢您的时间我希望我的问题和回答对未来的人有所帮助

【讨论】:

以上是关于错误:找不到版本 11(PostgreSQL 11)的 pg_ctl 可执行文件 + 让我们加密 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JETTY,JDK11 发邮件 javax/activation/DataSource类找不到错误

Gitlab CI 设置错误 - 找不到 JavaScript 运行时

PostgreSQL 错误:错误:MAXVALUE (2147483647) 乱序数据类型 (smallint)

PostgreSQL 迁移失败并出现错误消息“找不到驱动程序”

Laravel:错误 [PDOException]:在 PostgreSQL 中找不到驱动程序?

Laravel 和 Postgresql 带有消息“找不到驱动程序”错误的 PDOException