POSTGRESQL 关于安装中自动启动的问题 详解

开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群(共1160人左右 1 + 2 + 3)

7670b55606231ec98dfd174a3eb3f428.png

最近加群的人太多了,可能是因为这篇 Peace and love,从今天开始我们群正式加入 ORACLE ,因为群里的ORACLE 大佬也很多,所以基本上市面上能见到的常见的数据库产品,群里都有大佬和各种厂商,和工作者,我们准备把 Peace and love 发扬光大,都是数据库,大家一起学。

正题的开始说,基于POSTGRESQL 安装中,很多同学提出一个问题,就是安装中,希望能进行自动启动POSTGRESQL 数据库,不通过pg_ctl 命令来进行相关的工作。所以本期咱们来说说,自动化启动部分怎么搞。

实际上如果您在使用POSTGRESQL 的 yum 安装后,您可以直接通过安装后的 sudo systemctl start postgresql-15 来启动PostgreSQL ,所以如何设置这个部分,成为通过源码安装同学提出的问题。

[Unit]
Description=PostgreSQL 15 database server
Documentation=https://www.postgresql.org/docs/15/static/
After=syslog.target
After=network-online.target[Service]
Type=notifyUser=postgres
Group=postgres# Note: avoid inserting whitespace in these Environment= lines, or you may
# break postgresql-setup.# Location of database directory
Environment=PGDATA=/var/lib/pgsql/15/data/# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir ${PGDATA}
ExecStart=/usr/pgsql-15/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0# 0 is the same as infinity, but "infinity" needs systemd 229
TimeoutStartSec=0TimeoutStopSec=1h[Install]
WantedBy=multi-user.target

下面我们逐一对于一些关键的部分进行解析

根据撰写的规范首先我们以 【unit】作为开头,unit本身说明我们本身服务和他相依赖的服务并注明关系。其中会有 Description 部分,描述信息以及关于这部分的可以查询的网站信息等。

其中这里有 after , before, requires, wants conflicts ,  分别注明相关服务与本服务之间的启动顺序,和关闭的顺序,After 主要表明此服务之前需要启动的服务,和关闭时需要在这些服务前进行关闭的意思,Before正好相反,wants 为启动此服务中还有连带的非强制需要启动那些服务,conflicts 说明启动这个服务,不应该启动的其他服务。

After=syslog.target

After=network-online.target

这两个部分说明在关机前,在这两个部分关闭前,我们的POSTGRESQL 应该是已经关闭了。其中这两个部分在实际的工作中并未有什么关系系统安全和稳定的意义,After=syslog.target 这里可以忽略基本没有意义。

但是官方的程序会有相关的注明,所以我们还是这里写这个部分。下面的是关于postgresql服务中启动的方式是什么。同时这里我们使用什么用户和用户组来作为启动POSTGRESQL 或控制POSTGRESQL 的LINUX 账号。

[Service]

Type=notify

User=postgres

Group=postgres

下面的部分为标记PGDATA变量指定的数据库目录的部分,具体需要根据你自己的数据库目录进行设定

Environment=PGDATA=/var/lib/pgsql/15/data/

下面的三行是对于服务器如果缺少内存,则对于POSTGRESQL POSTMASTER 进行设置阻止系统在OOM 的时候,来kill postmaster 主进程

OOMScoreAdjust=-1000

Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj

Environment=PG_OOM_ADJUST_VALUE=0

在下面部分与我们的POSTGRESQL 的应用

这里主要是几个部分

1  PG 数据库的主数据目录

ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir ${PGDATA}

2  PG 的执行文件目录

ExecStart=/usr/pgsql-15/bin/postmaster -D ${PGDATA}

ExecReload=/bin/kill -HUP $MAINPID

在systemd unit文件中的ExecReload行。它指定了在重新加载服务时要执行的命

令。在这种情况下,命令是通过发送SIGHUP信号给$MAINPID来重新加载服务。

SIGHUP信号是一种常用的信号,用于通知进程重新加载其配置文件或重新初始化。通过执行上述命令,systemd将向$MAINPID指定的主进程发送SIGHUP信号,从而触发服务的重新加载操作。

请注意,$MAINPID将在运行该unit文件时被实际的主进程PID替换。因此,实际执行的命令可能类似于:/bin/kill -HUP 1234,其中1234是实际的主进程PID。这将确保正确地发送信号以重新加载服务

KillMode=mixed

KillSignal=SIGINT

设置KillMode=mixed时,systemd会同时使用两种终止模式:ControlGroup和Process。

ControlGroup模式:systemd发送SIGTERM信号给进程组中的所有进程,等待一段时间,让它们正常终止。如果进程在超时时间内仍未终止,systemd会发送SIGKILL信号给进程组中的所有进程,强制终止它们。

Process模式:systemd只发送SIGTERM信号给主进程,等待一段时间,让其正常终止。如果主进程在超时时间内未终止,systemd会发送SIGKILL信号给主进程,强制终止它。与服务相关的其他进程将不受影响。

通过设置KillMode=mixed,可以在终止服务时先尝试优雅地终止与服务相关的所有进程,然后再强制终止仍未终止的进程。这有助于确保服务的完全终止。

KillSignal=SIGINT 是 systemd unit 文件中的一个选项,用于指定在终止服务时使用的信号。

SIGINT 是 POSIX 标准中定义的一个信号,用于通知进程中断的信号。当进程接收到 SIGINT 信号时,它会收到一个中断请求,通常用于请求进程优雅地退出。通过设置 KillSignal=SIGINT,systemd 会在终止服务时向进程发送 SIGINT 信号。进程可以响应该信号并做出相应的处理,例如释放资源、保存数据等。如果进程在一定时间内没有对 SIGINT 信号做出响应,则 system 会尝试使用其他信号终止该进程。

需要注意的是,默认情况下,systemd 会使用 SIGTERM 信号终止服务进程。但是,如果你想要使用 SIGINT 信号作为终止信号,可以通过设置 KillSignal=SIGINT 来覆盖默认设置。

总之,通过设置 KillSignal=SIGINT,可以让 systemd 在终止服务时使用 SIGINT 信号,使进程有机会优雅地处理退出操作。这可以帮助确保服务的正确终止

剩下的这个部分

686bd8adcc470af7d1ca612e5d35134e.png

在 systemd unit 文件中,TimeoutSec=0 是一个选项,用于指定服务的运行超时时间。将 TimeoutSec 设置为 0 表示禁用超时限制,即服务可以无限期地运行。

在 systemd unit 文件中,TimeoutStartSec=0 是一个选项,用于指定服务的启动超时时间。将 TimeoutStartSec 设置为 0 表示禁用启动超时限制,即系统将不会对服务的启动操作设置时间限制。

在 systemd unit 文件中,TimeoutStopSec=1h 是一个选项,用于指定服务的停止超时时间。将 TimeoutStopSec 设置为 1h 表示服务的停止操作限时 1 小时。

8d3479a8c27da0271ddbd4bdd8ba155d.png

在 systemd unit 文件中,WantedBy=multi-user.target 是一个选项,用于指定服务所属的 target。

systemd 的 target 是一组相关的单元的集合,可以作为系统的一个运行级别来理解。multi-user.target 是一个默认的 systemd target,代表了多用户模式的运行级别。其中/usr/lib/systemd/system/ 目录是存放系统服务单元文件的位置.  剩下的就是将服务的文件放到对应的目录,这里以CENTOS 为例,后续有机会我们在那 unbantu 为例一次。注意权限的设定。

11508f2c6eed6446c0318b43d1e092d2.png

sudo systemctl enable postgresql-15

最后我们在将postgresql服务项,设置为自启动即可,此时你的系统可以通过如下的命令来控制POSTGRESQL

[root@pg15b system]# sudo systemctl start postgresql-15

[root@pg15b system]# sudo systemctl stop postgresql-15

[root@pg15b system]# sudo systemctl restart postgresql-15

33d1219730fe8fdde9644fc7fecf3d41.png

18229f60097a78be67321eae2b937056.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenSSH 远程升级到 9.4p1

OpenSSH 远程升级到 9.4p1 文章目录 OpenSSH 远程升级到 9.4p1背景升级前提1. 升级 OpenSSL2. 安装并启用Telnet 升级OpenSSH 背景 最近的护网行动,被查出来了好几个关于OpenSSH 的漏洞。这是因为服务器系统安装后,直接使用了系统自带版本的OpenSSH &am…

2023-08-15 linux mipi 屏幕调试:有一个屏幕开机时候不显示,开机后按power 按键休眠唤醒就可以显示。原因是reset gpio 被复用

一、现象:今天更新了一个新版本的buildroot linux sdk ,调试两个mipi 屏幕,这两个屏幕之前在其他的sdk都调好了的,所有直接把配置搬过来。但是有一个屏幕可以正常显示,有一个屏幕开机时候不显示,开机后按po…

CentOS防火墙操作:开启端口、开启、关闭、配置

一、基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewalld systemctl是…

C语言,结构体,结构体大小,

1、结构体: 用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。 结构体的声明: struct 结构体类型名{ 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; ……… }&#xff1…

转行软件测试四个月学习,第一次面试经过分享

我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余&…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心,主要用于海量日志数据的异地扩展备份管理,多条件组合的高效查询,统计和趋势报表生成,设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调:以下内容仅供学习和测试,一切行为均在…

Keil开发STM32单片机项目的三种方式

STM32单片机相比51单片机,内部结构复杂很多,因此直接对底层寄存器编码,相对复杂,这个需要我们了解芯片手册,对于复杂项目,这些操作可能需要反复编写,因此出现了标准库的方式,对寄存器…

ES中倒排索引机制

在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

Java Vue Uniapp MES生产执行管理系统

本MES系统是一款B/S结构、通用的生产执行管理系统,功能强大! 系统基于多年离散智造行业的业务经验组建,主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 联系作者获取

Linux(进程控制)

进程控制 进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因 进程终止进程退出码进程常见退出方法 进程等待进程等待必要性获取子进程status进程等待的方法 阻塞等待与非阻塞等待阻塞等待非阻塞等待 进程替换替换原理替换函数函数解释命名理解 做一个…

re学习(32)【绿城杯2021】babyvxworks(浅谈花指令)

链接:https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取码:b9xf wp:首先找不到main函数,然后寻找特殊字符串, 交叉引用 反汇编 主函数在sub_3D9当中,但是IDA分析错了 分析错误后,删除函数 创建函数 操…

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…

无脑入门pytorch系列(三)—— nn.Linear

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?

在application.properties中配置: spring.main.lazy-initializationtrue在运行SpringApplication的run方法时,代码如下: 其中调用了prepareContext,prepareContext代码如下: 当在配置文件中配置了spring.main.lazy-initializat…

JavaScript实现在线Excel的附件上传与下载

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求&am…

Clickhouse基于文件复制写入

背景 目前clickhouse社区对于数据的写入主要基于文件本地表、分布式表方式为主,但缺乏大批量快速写入场景下的数据写入方式,本文提供了一种基于clickhouse local 客户端工具分布式处理hdfs数据表文件,并将clickhouse以文件复制的方式完成写入…

开源低代码平台Openblocks

网友 HankMeng 想看低代码工具,正好手上有一个; 什么是 Openblocks ? Openblocks 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用程序。 传统上,构建内部应用程序需要复杂的前端和后端交互,…

如何保证微信小游戏存档不丢失?

引言 微信小游戏的兴起为玩家提供了一个轻松便捷的娱乐方式,然而,存档丢失问题一直以来都是开发者和玩家关注的焦点。为了确保玩家的游戏体验和投入能够得到充分的保障,开发团队需要采取一系列方法来保障微信小游戏存档不丢失。本文将介绍一…