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