重启后 /var/run/postgresql 丢失

ibl*_*vic 4 postgresql centos centos7

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

UTC FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": No such file or directory
Run Code Online (Sandbox Code Playgroud)

仔细观察,我注意到/var/run/postgresql重新启动后不存在事件。

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

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

什么可能导致此特定问题发生并且在重新启动后不启动 postgres?

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

谢谢

lar*_*sks 11

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

# ls -ld /var/run
lrwxrwxrwx. 1 root root 6 Jan 19 09:12 /var/run -> ../run
Run Code Online (Sandbox Code Playgroud)

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

# mount | grep /run
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
Run Code Online (Sandbox Code Playgroud)

一个tmpfs文件系统是在内存中的文件系统:任何那里消失,系统重新启动时。正如 Federico 在他的评论中所说,CentOS 7(以及 Fedora 和 RHEL 7 等)使用该systemd-tmpfiles工具在系统启动时自动创建诸如锁定目录和其他临时存储位置之类的东西。

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

# 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 -
Run Code Online (Sandbox Code Playgroud)

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