Я столкнулся с этой проблемой несколько месяцев назад при других (я забыл подробности) обстоятельствах, и вот мы снова здесь. Если вы погуглите эту проблему, есть много похожих сообщений, но ни одна из них не приведет к удовлетворительному выводу. Если только это не основано на разрешениях, что я изо всех сил пытаюсь понять.
Я останавливаю и запускаю службу postgres из сценария Debian init.d, который запускается, если восстановление базы данных считается необходимым.
Это не останавливает никаких проблем:
systemctl stop postgresql
Операция восстановления выполняется без сбоев (pgbackrest, резервное копирование раздела, размещенное удаленно):
sudo -u postgres bash -c "pgbackrest --log-level-console=info --stanza=$stanza --delta restore"
Затем операция запуска просто зависает без отладки или регистрации:
systemctl start postgresql
Если я заменю вызов systemctl прямым вызовом postgres:
sudo -u postgres bash -c "/usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf
Я получаю следующую ошибку (не обращайте внимания на метку времени, я использую это просто тестовое поле):
2016-11-03 17:30:27 UTC [2511-3] FATAL: could not open directory "/var/run/postgresql/9.5-main.pg_stat_tmp": No such file or directory
Следующее, на что следует обратить внимание, это то, что Postgres 9.5 и 9.6 сосуществуют в системе, а экземпляр 9.6 останавливается и запускается нормально через вызовы systemctl (которые запускают все настроенные кластеры), поэтому, если это была проблема разрешений, почему 9.5 потерпеть поражение? Если на самом деле все, что ему нужно сделать, это создать этот файл, тогда я не вижу причин для ошибки, или ошибка, возможно, отвлекает?
TEST-RIG-postgres@CIE-4096:/root$ ls -l /var/run/postgresql/
total 4
drwxr-s--- 2 postgres postgres 100 Nov 3 17:36 9.6-main.pg_stat_tmp
-rw-r--r-- 1 postgres postgres 5 Nov 3 17:20 9.6-main.pid
ls -l /var/run/
...
drwxrwsr-x 3 postgres postgres 120 Nov 3 17:30 postgresql
Я просто немного потерялся в этом. Может быть, потому, что он вызывается во время инициализации системы (обычно Postgres запускается нормально)? Я добавил следующее в раздел LSB и без разницы:
# Required-Start: postgresql
Решение: запустить
mkdir -p /var/run/postgresql/9.5-main.pg_stat_tmp
chown postgres /var/run/postgresql/9.5-main.pg_stat_tmp
chgrp postgres /var/run/postgresql/9.5-main.pg_stat_tmp