У меня установлена машина 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 должна запуститься без проблем.