● postgresql-10.service - PostgreSQL 10 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-10.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2025-07-30 14:05:42 CST; 11s ago Process: 661815 ExecStart=/opt/PostgreSQL/10/bin/pg_ctl start -w -D /opt/PostgreSQL/10/data -l /opt/PostgreSQL/10/data/log/startup.log (code=exited, status=203/EXEC) Jul 30 14:05:42 Sonarcube_DEV systemd[1]: Starting PostgreSQL 10 database server... Jul 30 14:05:42 Sonarcube_DEV systemd[1]: postgresql-10.service: Control process exited, code=exited status=203 Jul 30 14:05:42 Sonarcube_DEV systemd[1]: postgresql-10.service: Failed with result 'exit-code'. Jul 30 14:05:42 Sonarcube_DEV systemd[1]: Failed to start PostgreSQL 10 database server.
时间: 2025-07-30 14:15:12 浏览: 19
<think>根据用户提供的错误信息,PostgreSQL 10服务启动失败,错误信息显示为“exit-code”和“status=203/EXEC”。这通常与执行权限或路径配置问题有关。以下是解决步骤:
1. **检查可执行文件权限**:
- 确保`pg_ctl`文件具有可执行权限。使用命令:
```bash
ls -l /opt/PostgreSQL/10/bin/pg_ctl
```
如果权限不足,运行:
```bash
chmod +x /opt/PostgreSQL/10/bin/pg_ctl
```
2. **检查启动命令路径**:
- 在服务文件`/usr/lib/systemd/system/postgresql-10.service`中,确认`ExecStart`的路径是否正确。例如:
```
ExecStart=/opt/PostgreSQL/10/bin/pg_ctl start -w -D /opt/PostgreSQL/10/data -l /opt/PostgreSQL/10/data/log/startup.log
```
确保路径`/opt/PostgreSQL/10/bin/pg_ctl`存在。
3. **检查数据目录权限**:
- PostgreSQL用户(通常是`postgres`)必须对数据目录`/opt/PostgreSQL/10/data`有读写权限。使用:
```bash
chown -R postgres:postgres /opt/PostgreSQL/10/data
chmod 700 /opt/PostgreSQL/10/data
```
4. **检查日志文件路径**:
- 确保日志目录`/opt/PostgreSQL/10/data/log`存在,且PostgreSQL用户有权写入。若不存在,创建并授权:
```bash
mkdir -p /opt/PostgreSQL/10/data/log
chown postgres:postgres /opt/PostgreSQL/10/data/log
```
5. **手动启动测试**:
- 切换到`postgres`用户,手动启动数据库:
```bash
su - postgres
/opt/PostgreSQL/10/bin/pg_ctl start -D /opt/PostgreSQL/10/data -l /opt/PostgreSQL/10/data/log/startup.log
```
观察输出或日志文件中的具体错误。
6. **重新加载systemd并启动服务**:
- 修复后,重新加载systemd配置:
```bash
systemctl daemon-reload
systemctl start postgresql-10
```
完成以上步骤后,检查服务状态:`systemctl status postgresql-10`。
§§相关问题§§
1. 如何修改PostgreSQL的systemd服务文件以解决路径或权限问题?
2. 当PostgreSQL启动失败时,如何通过日志文件(如startup.log)定位具体错误?
3. 在Linux系统中,如何为PostgreSQL服务设置正确的用户和目录权限?
4. 如果手动启动PostgreSQL成功但systemd启动失败,可能的原因有哪些?</think>根据您提供的PostgreSQL 10服务启动失败的错误信息,关键问题在于:
1. 服务状态显示`failed (Result: exit-code)`
2. 具体报错:`status=203/EXEC`
3. 日志显示`Control process exited`和`Failed to start`
### 解决方案步骤:
1. **检查可执行文件权限**(最常见原因):
```bash
ls -l /opt/PostgreSQL/10/bin/pg_ctl
```
- 若无执行权限(缺少`x`),运行:
```bash
chmod +x /opt/PostgreSQL/10/bin/pg_ctl
```
2. **验证服务文件配置**:
```bash
cat /usr/lib/systemd/system/postgresql-10.service
```
- 确认`ExecStart`路径正确(应为`/opt/PostgreSQL/10/bin/pg_ctl`)
- 检查`WorkingDirectory`是否指向有效目录
3. **修复SELinux环境问题**(若启用):
```bash
sestatus # 查看SELinux状态
restorecon -Rv /opt/PostgreSQL/10/bin/ # 重置安全上下文
```
4. **手动测试启动命令**:
```bash
sudo -u postgres /opt/PostgreSQL/10/bin/pg_ctl start -D /opt/PostgreSQL/10/data
```
- 观察终端直接输出的错误信息
5. **检查数据目录权限**:
```bash
chown -R postgres:postgres /opt/PostgreSQL/10/data
chmod 700 /opt/PostgreSQL/10/data
```
6. **重新加载服务配置**:
```bash
systemctl daemon-reload
systemctl start postgresql-10
```
### 关键注意事项:
- 错误`203/EXEC`通常表示:
✓ 二进制文件路径错误
✓ 缺少执行权限
✓ 动态链接库缺失(用`ldd /opt/PostgreSQL/10/bin/pg_ctl`检查)
- 日志文件`/opt/PostgreSQL/10/data/log/startup.log`可能包含更详细的错误原因
阅读全文
相关推荐
















