Ubuntu 20.04重启后PostgreSQL 12无法自动启动问题求助
PostgreSQL 12 on Ubuntu 20.04 升级后无法自启排查修复方案
故障核心原因
该问题几乎都是升级过程中包管理器错误重置了PostgreSQL相关目录权限导致的,systemd服务启动时postgres用户无权限写入日志或PID文件,启动失败退出;手动切换postgres用户启动时,要么写入了用户有权限的临时路径,要么继承了当前用户的权限上下文所以可以正常运行。
排查修复步骤
- 步骤1:修复日志目录权限
执行命令检查目录归属:ls -ld /var/log/postgresql
正常输出应为:
drwxrwxr-t 2 postgres postgres 4096 Nov 12 2021 /var/log/postgresql
如果所有者不是postgres:postgres,执行如下命令修复:
sudo chown -R postgres:postgres /var/log/postgresql sudo chmod 750 /var/log/postgresql sudo chown postgres:postgres /var/log/postgresql/postgresql-12-main.log
- 步骤2:修复运行时目录权限
PostgreSQL启动时需要向/run/postgresql写入PID文件,该目录是systemd管理的临时目录,重启后会重建,如果配置错误会导致权限异常:
执行命令检查:ls -ld /run/postgresql
正常输出应为:
drwxrwsr-x 2 postgres postgres 100 Nov 12 2021 /run/postgresql
如果归属或权限异常,先临时修复:
sudo chown postgres:postgres /run/postgresql sudo chmod 2775 /run/postgresql
再检查systemd单元配置避免重启后再次失效:
执行systemctl cat postgresql@12-main.service,确认[Service]段存在如下配置:
User=postgres Group=postgres RuntimeDirectory=postgresql RuntimeDirectoryMode=2775
如果缺少上述配置,执行sudo systemctl edit postgresql@12-main.service,将上述内容写入配置文件后保存,再执行sudo systemctl daemon-reload生效。
- 步骤3:验证修复结果
执行如下命令重启服务验证:sudo systemctl restart postgresql@12-main.service
执行pg_lsclusters,确认12/main集群状态为online,执行systemctl status postgresql@12-main.service确认状态为active (running)即可。
内容的提问来源于stack exchange,提问作者Milano
相关产品推荐
相关产品推荐

