几个月前,我在不同的情况下(因为我忘记了细节)遇到了这个问题,现在又遇到了。如果你谷歌一下这个问题,会发现有很多类似的帖子,但似乎没有一个能真正得出令人满意的结论。除非它只是基于权限,而我很难看出这是基于权限的。
我正在从 Debian init.d 脚本停止并启动 postgres 服务,如果认为有必要恢复数据库,该脚本就会运行。
它停止没有问题:
systemctl stop postgresql
恢复操作运行顺利(pgbackrest,远程托管的 stanza 备份):
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
答案1
解决方案:运行
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