PostgreSQL源码安装后找不到postgresql.service怎么办?
2024-07-26 08:22:25
PostgreSQL源码安装后找不到postgresql.service?问题排查及解决方案
在 Rock Linux 系统上,选择从源码安装 PostgreSQL 虽然能带来更灵活的配置选项,但也可能遇到一些软件包安装中不会出现的状况。执行 systemctl restart postgresql
命令时如果遇到 Failed to start postgresql.services: Unit postgresql.service not found
的错误提示,就说明系统找不到预期的 postgresql.service 文件,这是源码安装 PostgreSQL 时经常遇到的问题。
为什么会发生这种情况?因为源码安装默认不会自动创建 systemd 服务单元文件,而 systemd 恰恰是 Linux 系统用于管理服务的关键组件。
深入问题根源
systemd 是通过 .service 文件来定义和管理服务的,包括服务的启动、停止、重启等操作。 如果在 /usr/lib/systemd/system
目录下找不到 postgresql.service 文件,systemd 就无法识别和管理 PostgreSQL 服务,自然就无法执行 systemctl restart postgresql
这样的命令。
解决方案:两种思路
1. 手动创建 systemd 服务单元文件
这是解决问题的直接方法:自己动手创建 systemd 需要的 postgresql.service 文件。
首先,确认 PostgreSQL 的安装目录,然后在 /usr/lib/systemd/system/postgresql.service
路径下创建一个新文件,并将以下内容粘贴进去:
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /usr/local/pgsql/data
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
KillMode=process
[Install]
WantedBy=multi-user.target
几点需要注意:
/usr/local/pgsql
需要替换成你的 PostgreSQL 实际安装路径。User
和Group
字段需要根据你的系统配置修改。
创建文件后,执行以下命令让 systemd 重新加载服务单元文件:
systemctl daemon-reload
现在,你就可以使用 systemctl start postgresql
命令启动 PostgreSQL 服务,并使用 systemctl enable postgresql
设置开机自启动。
2. 使用 pg_ctl 命令管理 PostgreSQL 服务
除了依赖 systemd,PostgreSQL 自身也提供了命令行工具 pg_ctl
用于管理服务。
使用 pg_ctl
命令前,需要先进入 PostgreSQL 数据目录:
cd /usr/local/pgsql/data
启动、停止、重启 PostgreSQL 服务的命令如下:
pg_ctl start
pg_ctl stop
pg_ctl restart
pg_ctl
命令赋予了你更高的灵活性,但同时也需要你手动管理服务的启动和停止。
总结
总而言之,解决 PostgreSQL 源码安装后找不到 postgresql.service 文件的问题,可以选择手动创建 systemd 服务单元文件,或者使用 pg_ctl
命令管理 PostgreSQL 服务。
建议优先考虑使用 systemd 管理 PostgreSQL 服务,因为它能够更便捷地管理服务的启动、停止、重启等操作。
希望本文能够帮助你解决 PostgreSQL 源码安装过程中的问题,顺利使用 PostgreSQL 数据库。
常见问题
-
创建了 postgresql.service 文件,但启动服务时仍然报错?
检查文件路径是否正确,文件内容中的路径和用户组信息是否与实际一致。
-
使用
pg_ctl
启动服务时报错 "pg_ctl: no database directory specified and environment variable PGDATA unset"?你需要进入 PostgreSQL 数据目录后再执行
pg_ctl
命令,或者设置PGDATA
环境变量。 -
如何查看 PostgreSQL 服务的运行状态?
使用
systemctl status postgresql
命令查看服务状态。 -
如何设置 PostgreSQL 服务开机自启动?
使用
systemctl enable postgresql
命令设置开机自启动。 -
如何禁用 PostgreSQL 服务开机自启动?
使用
systemctl disable postgresql
命令禁用开机自启动。