我的 Linux 服务器上运行着 PostgreSQL。
PostgreSQL 已启用并在重启后处于活动状态。
我在 PostgreSQL 的配置文件中启用了远程访问。但每次我重启设备后,远程访问就不再可用:
systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-04-12 02:05:22 CEST; 10min ago
Process: 491 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 491 (code=exited, status=0/SUCCESS)
CPU: 5ms
Apr 12 02:05:22 raspberrypi systemd[1]: Starting PostgreSQL RDBMS...
Apr 12 02:05:22 raspberrypi systemd[1]: Finished PostgreSQL RDBMS.
cat grafana.log
logger=tsdb.postgres t=2022-04-12T02:18:50.33+0200 lvl=eror msg="query error" err="dial tcp 192.1.1.1:5432: connect: connection refused"
重新启动服务后,PostgreSQL 上的远程访问就可以正常工作了:
sudo systemctl restart postgresql
systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-04-12 02:53:47 CEST; 25min ago
Process: 2541 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2541 (code=exited, status=0/SUCCESS)
CPU: 5ms
Apr 12 02:53:47 raspberrypi systemd[1]: Starting PostgreSQL RDBMS...
Apr 12 02:53:47 raspberrypi systemd[1]: Finished PostgreSQL RDBMS.
答案1
Postgres 已启用并且在重启后处于活动状态。
是吗?输出看起来像是退出了:
systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-04-12 02:05:22 CEST; 10min ago
Process: 491 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 491 (code=exited, status=0/SUCCESS)
CPU: 5ms
Apr 12 02:05:22 raspberrypi systemd[1]: Starting PostgreSQL RDBMS...
Apr 12 02:05:22 raspberrypi systemd[1]: Finished PostgreSQL RDBMS.
具体来说,我正在查看“主 PID: 491 (代码=退出,状态=0/SUCCESS)”。
编辑:
或许看上去并非如此。这ServerFault 的答案似乎可能有一些很好的提示。
鉴于这是 Raspberry Pi,如果启动过程中出现一些问题导致出现相同的症状,我不会感到惊讶这里(这是针对 Ubuntu 环境的,但是嘿,RPi 也是 Debian):
postgresql-common 包安装的 postgresql 服务单元只是一个虚拟服务,它会导致实际服务 [电子邮件保护]通过依赖项启动。
...
该依赖项不是永久的,而是由 systemd 生成器 /lib/systemd/system-generators/postgresql-generator(也随 postgresql-common 包提供)在系统启动期间生成的。生成器会检查文件 /etc/postgresql/9.6/main/start.conf 中的启动模式是否设置为自动,如果是,则设置依赖项,随后导致实例 9.6-main 启动。
...
由于 systemd 生成器的限制(请参阅 man systemd.generator),此过程可能会失败,导致重启后依赖项缺失。然后 Systemd 将仅启动虚拟服务
...
运行命令
systemctl daemon-reload
以 root 身份手动重新运行生成器,并且在大多数情况下可以解决问题,直到下次重启。
永久解决问题你必须找到发电机在启动过程中发生故障的原因。可能的原因可以在 systemd.generator 手册页中找到。在我的例子中,是 PostgreSQL 配置文件 /etc/postgresql/9.6/main/postgresql.conf 被符号链接到另一个文件系统,而当生成器在启动初期运行时,该文件系统尚不可用。postgresql-generator 会检查该文件是否存在,即使它本来不需要它。
也许生成器在启动时失败,虚拟 postgresql 服务启动,然后生成器稍后成功,因此您可以通过重新启动它来再次运行该服务sudo systemctl restart postgresql
。
答案2
查看systemctl status
输出:
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-04-12 02:53:47 CEST; 25min ago
Process: 2541 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2541 (code=exited, status=0/SUCCESS)
CPU: 5ms
由于服务已启动但退出,因此表明 PostgreSQL 在尝试启动时退出。因此,这不是服务问题,而是 PostgreSQL 服务器问题。检查 PostgreSQL 日志/var/log
和日志中的最后条目;这应该可以解释问题所在。
根据我的经验,这类问题都是基于与 PostgreSQL 相关的权限问题等愚蠢问题。或者您是否将 PostgreSQL 绑定到特定 IP 地址?
在某些情况下,启动服务将尝试绑定到系统中尚未设置的 IP 地址。我猜你应该bind
重新0.0.0.0
启动,看看是否有帮助。