You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CentOS 6/7系统下修改双PostgreSQL 10服务名称方法咨询

刚好我之前也处理过类似的需求,在CentOS 6/7上给多个PostgreSQL 10实例设置不同的进程名称其实不难,分两种环境给你讲具体操作:

针对CentOS 7(Systemd 环境)

CentOS 7用systemd管理服务,我们需要给第二个实例创建独立的服务配置文件,同时指定自定义进程名:

  • 首先复制默认的PostgreSQL 10服务文件,给第二个实例命名(比如用端口5433区分):
    cp /usr/lib/systemd/system/postgresql-10.service /etc/systemd/system/postgresql-10-5433.service
    
  • 编辑这个新的服务文件,修改3个关键配置:
    1. 修改Description字段,让服务名更易区分:
      Description=PostgreSQL 10 database server (Port 5433)
      
    2. 修改Environment=PGDATA指向第二个实例的数据目录(要提前用initdb初始化好):
      Environment=PGDATA=/var/lib/pgsql/10/data_5433/
      
    3. ExecStart行添加-n参数指定进程名称(比如postgres_5433):
      ExecStart=/usr/pgsql-10/bin/postgres -D ${PGDATA} -n postgres_5433
      
  • 重新加载systemd配置并启动新服务:
    systemctl daemon-reload
    systemctl enable postgresql-10-5433
    systemctl start postgresql-10-5433
    
    现在用ps aux | grep postgres查看,第二个实例的进程名就会显示为postgres_5433了。
针对CentOS 6(Init.d 环境)

CentOS 6用传统的init.d脚本管理服务,操作思路类似:

  • 复制默认的init脚本:
    cp /etc/init.d/postgresql-10 /etc/init.d/postgresql-10-5433
    
  • 编辑新脚本,调整配置:
    1. 修改PGDATA变量指向第二个实例的数据目录:
      PGDATA="/var/lib/pgsql/10/data_5433"
      
    2. 找到启动postgres的命令行(通常是su - postgres -c "$PGENGINE/postgres -D '$PGDATA' $PGOPTS"),添加-n参数指定进程名:
      su - postgres -c "$PGENGINE/postgres -D '$PGDATA' -n postgres_5433 $PGOPTS"
      
    3. 可选:修改DESC变量让服务描述更清晰:
      DESC="PostgreSQL 10 database server (Port 5433)"
      
  • 设置脚本权限并加入服务列表启动:
    chmod +x /etc/init.d/postgresql-10-5433
    chkconfig --add postgresql-10-5433
    service postgresql-10-5433 start
    
额外补充:用pg_ctl直接启动的情况

如果你不用系统服务管理,而是直接用pg_ctl启动实例,可以通过-o参数传递-n选项:

pg_ctl start -D /var/lib/pgsql/10/data_5433 -o "-n postgres_5433"

注意:每个实例的data目录要提前用initdb初始化,并且在postgresql.conf里设置不同的port参数(比如5433),避免端口冲突。

内容的提问来源于stack exchange,提问作者P_Ar

火山引擎 最新活动