前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgresql systemctl 启动设置与问题

Postgresql systemctl 启动设置与问题

作者头像
AustinDatabases
发布2021-07-15 13:23:20
2.8K0
发布2021-07-15 13:23:20
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

Postgresql 需要打开和关闭,一般我们都使用 pg_ctl 命令来进行,实际上一般我们的LINUX 上的系统的一般是可以通过 systemctl 的方式来启动和关闭以及操纵一些相关的功能。

在开始POSTGRESQL systemctl 工作前,我们需要说一下LINUX 的 systemd , systemd 是linux 系统中最新的初始化系统 init ,目前所有的LINUX 系统包含 UBUNTU 或者 CENTOS 等都采用了systemd 的方式来启动服务,提高了系统的启动速度,systemd 的概念来源与评估的MAC OS 系统的launchd, 好处是通过systemd ,迁移之前的启动的方式简单,并且尽量使用并行的方式进行系统的启动。

systemctl 的启动文件,一般存放在/usr/lib/systemd/system 文件夹下,文件的模块主要分为3个。

1 Unit

2 Unit 类型

3 install

通过 systemctl 命令来对启动文件的加载,起用, 和命令的执行进行执行和管理。

下面是一个postgresql systemd 启动文件

1 单元unit 是对这个启动文件进行一个介绍这个启动文件是什么

after 是注明此服务启动前必须的启动项.

其中还有其他的一些启动项选择

before, requires , wants , conflicts

[Unit]

Description=PostgreSQL database server

After=network.target

[Service]

Type=forking

simple:默认值,这个服务主要由 ExecStart 设置的程序来启动,启动后常驻于内存中。 forking:由 ExecStart 指定的启动的程序通过 spawns 产生子进程提供服务,然后父进程退出。 oneshot:与 simple 类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。 dbus:与 simple 类似,但这个服务必须要在取得一个 D-Bus 的名称后,才会继续运行!因此设置这个项目时,通常也要设置 BusName= 才行。 idle:与 simple 类似,意思是,要执行这个服务必须要所有的工作都顺利执行完毕后才会执行。这类的服务通常是开机到最后才执行即可的服务。 notify:与 simple 类似,但这个服务必须要收到一个 sd_notify() 函数发送的消息后,才会继续运行

User=postgres

Group=postgres

启动此应用的服务器用户与服务器组

关于在内存OOM的情况下, 这个应用程序是否要被KILL ,值从1000到-1000开始, 这边我们设置在缺乏内存的情况下,不KILL Postgresql 的服务.

OOMScoreAdjust=-1000

Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj

Environment=PG_OOM_ADJUST_VALUE=0

# PGSTARTTIMEOUT should be less than TimeoutSec value.

Environment=PGSTARTTIMEOUT=300

Environment=PGDATA=/pgdata/data

ExecStart=/usr/local/postgres/bin/pg_ctl start -D {PGDATA} -s -w -t {PGSTARTTIMEOUT}

ExecStop=/usr/local/postgres/bin/pg_ctl stop -D ${PGDATA} -s -m fast

ExecReload=/usr/local/postgres/bin/pg_ctl reload -D ${PGDATA} -s

ExecStart 就是实际执行此服务的程序。接受 "命令 参数 参数..." 的格式,不能接受 <, >, >>, |, & 等特殊字符,很多的 bash 语法也不支持。所以,要使用这些特殊的字符时,最好直接写入到脚本里面去!

ExecStop 用来实现 systemctl stop 命令,关闭服务。

ExecReload 用来实现 systemctl reload 命令,重新加载服务的配置信息。

TimeoutSec=300

设置如果在关闭或打开服务时并不顺利,则强制打开或关闭在300秒后开始

KillMode=mixed

  • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
  • process:只杀主进程
  • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
  • none:没有进程会被杀掉,只是执行服务的 stop 命令。

[Install]

WantedBy=multi-user.target

在建立文件后, postgresql.serivce 需要将文件

加载进systemctl 并且在打开 enable

sudo systemctl daemon-reload

sudo systemctl enable postgresql

直接通过命令来判断服务器的启动或关闭的状态

代码语言:javascript
复制
systemctl   is-active postgresql.service

POSTGRESQL 打开、关闭、重启、状态,就都通过systemd 的方式来进行了。

代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档