/var/run/postgres 不断被删除,导致 postgres 无法启动

/var/run/postgres 不断被删除,导致 postgres 无法启动

默认情况下,我的 PostgreSQL 安装在中创建一个套接字,/tmp但我的psql命令行客户端正在中查找/var/run/postgresql/.s.PGSQL.5432

为了解决这个问题,我编辑postgresql.conf并将目录更改为

unix_socket_directories = '/var/run/postgresql/'

postgresql不幸的是,默认情况下,目录中没有目录var/run。因此,我创建了它并启动了服务器,一切运行正常。当我关闭并重新启动服务器时,由于某种原因,目录/var/run/postgresql消失了。这导致 postgres 启动崩溃并出现错误:

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

感谢帮助!

答案1

解决方案 1(通过管理临时目录 /run/postgresql、/var/run/postgresql)

目录/运行/postgresql是临时目录。路径 /var/运行/postgresql通常是到 /run/postgresql 的符号链接。

systemd-tmp文件是管理此类临时文件和目录的机制。systemd-tmp文件在启动期间创建临时目录并设置其所有者、组和权限。它可能会读取三个不同位置的配置文件。/etc/tmpfiles.d 中的文件会覆盖 /usr/lib/tmpfiles.d 和 /run/tmpfiles.d 中同名的文件。

我们可以创建目录/运行/postgresql在启动时使用systemd-tmp文件通过创建如下的 postgresql 配置文件来建立机制

echo "d /run/postgresql 0755 postgres postgres -" > /usr/lib/tmpfiles.d/postgresql.conf

解决方案 2(通过重新定位 PostgreSQL 锁文件位置)

修复此问题的另一种方法是重新定位 PostgreSQL 锁定文件位置。我们可以通过使用以下查询来实现

ALTER SYSTEM SET unix_socket_directories='<any-existing-path-with-valid-permissions>, /tmp';

在这里,我们可以为系统中已存在的 PostgreSQL 锁文件提供任何路径,并且该文件具有 postgres 用户管理锁文件所需的权限。

相关内容