重启后 /var/run/postgresql 丢失

重启后 /var/run/postgresql 丢失

我安装了 Centos7 机器,但遇到了重启后 postgres 无法启动的问题。即使我尝试手动运行该服务,我也遇到了

UTC FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": No such file or directory

仔细观察后,我发现/var/run/postgresql重启后该事件不再存在。

所以实际上有几个问题,因为我在研究中没有找到明确的答案。

/var/run 中的目录是如何以及何时创建的,它是在启动服务时创建的还是以某种方式创建的?

什么原因导致这个特定问题发生并且重启后无法启动 postgres?

我以前从未见过这种行为,尽管平心而论,到目前为止我一直在使用 ubuntu。

谢谢

答案1

如果你检查/var/run你的系统,你会发现它实际上是一个符号链接/run

# ls -ld /var/run
lrwxrwxrwx. 1 root root 6 Jan 19 09:12 /var/run -> ../run

如果你检查一下/run,你会发现它实际上是一个tmpfs挂载点:

# mount | grep /run
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)

文件系统tmpfs是内存文件系统:系统重启后,内存中的任何内容都会消失。正如 Federico 在其评论中所说,CentOS 7(以及 Fedora、RHEL 7 等)使用该systemd-tmpfiles功能在系统启动时自动创建锁定目录和其他临时存储位置等内容。

CentOS 7 中包含的软件包postgresql-server已经做了正确的事情:

# rpm -ql postgresql-server | grep tmpfiles
/usr/lib/tmpfiles.d/postgresql.conf

# cat /usr/lib/tmpfiles.d/postgresql.conf
d /var/run/postgresql 0755 postgres postgres -

如果您使用的是第三方 postgresql 包,请不要惊讶它无法与 CentOS 正确集成。您可以通过设置tmpfiles.d此处显示的相同条目来手动更正。

答案2

将 unix_socket_directories = ' /tmp' # 逗号分隔的目录列表添加到您的 postgresql 配置文件中。该文件应该位于某个位置(在 RHEL 7.x 和 CentOS 7.x 上)

/var/lib/pgsql/9.5/data/postgresql.conf

或者

/var/lib/pgsql/数据/postgresql.conf

然后重新启动服务器,你的postgresql服务应该可以正常启动。

相关内容