Назад | Перейти на главную страницу

/ 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.

Спасибо

Если вы изучите /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 файловая система - это файловая система в памяти: все, что там есть, исчезает при перезагрузке системы. Как говорит Федерико в своем комментарии, CentOS 7 (и Fedora, и RHEL 7 и т. Д.) Используют systemd-tmpfiles возможность автоматического создания таких вещей, как каталоги блокировок и другие временные хранилища при загрузке системы.

В postgresql-server пакет, включенный в CentOS 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 -

Если вы используете сторонний пакет postgresql, не удивляйтесь, что он некорректно интегрируется с CentOS. Вы можете исправить это вручную, настроив то же самое tmpfiles.d запись показана здесь.

Добавьте unix_socket_directories = '/ tmp' # список каталогов, разделенных запятыми, в ваш файл конфигурации postgresql. Файл должен быть где-то на (в RHEL 7.x и CentOS 7.x)

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

или

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

затем перезагрузите сервер, и ваша служба postgresql должна запуститься без проблем.