暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

PostgreSQL Systemctl启动设置与问题

文章转载自公众号:AustinDatabases

作者:carol11

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

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

systemctl   is-active postgresql.service

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

规模空前,再创历史 | 2020 PG亚洲大会圆满结束
PG ACE计划的正式发布
三期PostgreSQL国际线上沙龙活动的举办
六期PostgreSQL国内线上沙龙活动的举办

中国PostgreSQL分会与腾讯云战略合作协议签订

PostgreSQL 13.0 正式版发布通告

深度报告:开源协议那些事儿

从“非主流”到“潮流”,开源早已值得拥有

Oracle中国正在进行新一轮裁员,传 N+6 补偿

PostgreSQL与MySQL版权比较

新闻|Babelfish使PostgreSQL直接兼容SQL Server应用程序

四年三冠,PostgreSQL再度荣获“年度数据库”

更多新闻资讯行业动态技术热点,请关注中国PostgreSQL分会官方网站

https://www.postgresqlchina.com

中国PostgreSQL分会生态产品

https://www.pgfans.cn

中国PostgreSQL分会资源下载站

https://www.postgreshub.cn


点击此处阅读原文

↓↓↓

文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论