You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Linux 2023上PostgreSQL 12服务无法启动求助

Amazon Linux 2023上PostgreSQL 12服务无法启动求助

嗨,我仔细看了你的问题描述、服务文件配置和错误日志,一眼就发现了问题所在——你的systemd服务文件犯了一个低级但关键的错误,导致系统尝试去执行服务配置文件本身,而不是PostgreSQL的可执行程序,这才抛出了Exec format error错误。

问题根源分析

看错误日志里的这两行:

Oct 20 11:55:36 ip- systemd[364804]: postgresql.service: Failed to execute /usr/lib/systemd/system/postgresql.service: Exec format error
Oct 20 11:55:36 ip- systemd[364804]: postgresql.service: Failed at step EXEC spawning /usr/lib/systemd/system/postgresql.service: Exec format error

你的ExecStart配置写的是"/usr/lib/systemd/system/postgresql.service",这是systemd的配置文件路径,本身是文本格式,根本不是可执行程序,系统当然没法执行它。另外还有两个小问题:

  • WorkingDirectory设置成了systemd的目录,PostgreSQL需要运行在自己的数据目录下
  • 没有指定运行服务的用户,用root跑PostgreSQL既不安全也会有权限问题

解决方案:修正systemd服务配置

咱一步步来解决:

1. 确认PostgreSQL可执行文件位置

源码编译安装的PostgreSQL,默认安装路径是/usr/local/pgsql,可执行文件在/usr/local/pgsql/bin/postgres。你可以用下面的命令确认:

find /usr/local -name postgres -type f

2. 修正postgresql.service文件

把/usr/lib/systemd/system/postgresql.service替换成下面的配置(注意替换实际的路径,如果你的安装目录不一样):

[Unit]
Description=PostgreSQL database server
After=network.target  # 确保网络启动后再启动服务

[Service]
Type=forking  # PostgreSQL是后台守护进程,用forking模式
User=postgres  # 指定用postgres用户运行,源码安装通常会自动创建这个用户,如果没有就用useradd postgres创建
Group=postgres
WorkingDirectory=/usr/local/pgsql/data  # PostgreSQL的数据目录,需要先初始化
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data  # 正确的可执行文件路径+指定数据目录
ExecReload=/bin/kill -HUP $MAINPID  # 重载配置的命令
TimeoutSec=300
Restart=on-failure  # 服务失败时自动重启

[Install]
WantedBy=multi-user.target

3. 初始化数据库(如果还没做)

切换到postgres用户,初始化数据目录:

su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
exit

4. 修复权限(确保数据目录属于postgres)

chown -R postgres:postgres /usr/local/pgsql/data

5. 重新加载systemd并启动服务

systemctl stop postgresql  # 先停止之前的失败服务
systemctl daemon-reload    # 重新加载systemd配置
systemctl enable --now postgresql  # 启用并立即启动服务
systemctl status postgresql  # 检查服务状态

额外必要配置(可选但常用)

如果需要远程连接PostgreSQL,还需要做以下两步:

  1. 修改/usr/local/pgsql/data/postgresql.conf,监听所有地址:
    listen_addresses = '*'
    
  2. 修改/usr/local/pgsql/data/pg_hba.conf,添加允许远程连接的规则(比如允许所有IP用md5密码登录):
    host all all 0.0.0.0/0 md5
    
  3. 重启服务生效:
    systemctl restart postgresql
    
  4. 开放防火墙端口(如果用firewalld):
    firewall-cmd --add-port=5432/tcp --permanent
    firewall-cmd --reload
    

备注:内容来源于stack exchange,提问作者justaguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:43:07