/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)
Каталог /run/postgresql — это временный каталог. Путь /var/run/postgresql обычно является символической ссылкой на /run/postgresql.
systemd-tmpfiles — это механизм для управления такими временными файлами и каталогами. systemd-tmpfiles создает временные каталоги во время загрузки и устанавливает их владельца, группу и разрешения. Он может читать файлы конфигурации в трех разных местах. Файлы в /etc/tmpfiles.d переопределяют файлы с тем же именем в /usr/lib/tmpfiles.d и /run/tmpfiles.d.
Мы можем создать каталог /run/postgresql «на лету» во время загрузки, используя механизм systemd-tmpfiles , создав файл конфигурации 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.