【Linux】编译安装nginx,手写service配置文件,深度理解systemd控制管理服务底层原理

news2024/10/1 3:29:15

目录

一、了解服务

1、服务的本质

2、centos7的systemd的服务

3、service unit file配置文件的组成以及掌握常用选项

4、关于systemd管理的命令学习

5、运行级别

二、编译安装nginx,以及手写service配置文件,请看注释

​编辑


一、了解服务

1、服务的本质

“服务”的本质是一种程序,“服务”分两种:

程序服务程序:对内,为保证计算机的正常运行,比如systemd,协助管理程序

用户服务程序:对外,给网络上用户提供各种功能,比如购物、游戏等,常见httpd

服务一般是后台运行,已准备随时调用

2、centos7的systemd的服务

centos 6采用init初始化进程,是一个一个串行启动

centos7采用systemd作为祖宗进程,systemd也是一种init程序,①解决依赖关系并行启动;②按需启动(根据服务配置设定启动)③负责在系统启动或者运行时,激活系统资源、服务进程等

systemd还提供叫醒服务,举例,安装rpcbind,将其关闭,然后用另一台主机进行探测连接,查看进程状态,实验看一下

systemd可以向后兼容sysvinit,systemd可以将多个程序进行单元管理,单元类型分类:

单元类型扩展名说明
Serviceservice描述一个系统服务软件(这是我们最需要知道的)
Socket.socket描述一个进程间通信的套接字
Device.device描述一个内核识别的设备文件
Mount.mount描述一个文件系统的挂载点
Automount.automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或交换文件
Path.path描述一个文件系统中文件或目录
Timertimer描述一个定时器 (用于实现类似cron的调度任务)
Snapshot.snapshot用于保存一个systemd的状态
Scope.scope使用systemd的总线接口以编程的方式创建外部进程
Slice.slice描述居于Cgroup的一组通过层次组织的管理系统进程
Target.taget描述一组systemd的单元(我觉得可以理解为运行级别)

3、service unit file配置文件的组成以及掌握常用选项

要知道,yum和rpm安装的时候系统,安装的是软件包,是已经写好了,会自动将service配置文件放到/usr/lib/systemd/system/这个文件夹中,让这个服务程序自动被systemd管理,但是编译安装是不会自动被管理,那么如果想要被systemd管理,则需要手动编写service配置文件。

这里拓展一下,systemd统一管理的好处:

1、对计算机而言,systemd有一套自己的启动、关闭等命令规则,这样可以套公式一样进行所有程序的管理,也可以理解为这是为了有一套制度,更好的调度计算机理解需求;

2、对于电脑面前的运维工程师,可以更好的去查看记忆程序状态,尤其是管理大量不同程序的情况下,可以统一规则。

关于配置文件的书写格式:

service unit file文件通常由三部分组成:

[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等

[Service]:与特定类型相关的专用选项;此处为Service类型
#service这一步非常非常重要!!!

[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到
的一些选项
Unit段的常用选项
Description描述信息(一般会写一个描述,等下看实操案例)
After/Before自定义unit的启动顺序,表示当前unit应该晚于或者优先于哪些unit启动
Requires依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants依赖到的其它units,弱依赖
Conflicts定义units间的冲突关系
Service段的常用选项                                                                                  
Type定义影响ExecStart及相关参数的功能的unit进程启动类型
simple默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
forking由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
oneshot与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
notify在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
idle与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
notify在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
idle与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
EnvironmentFile环境配置文件
ExecStart指明启动unit要运行命令或脚本的绝对路径(最最最重要)
ExecStartPre ExecStart前运行
ExecStartPost ExecStart后运行
ExecStop指明停止unit要运行的命令或脚本的绝对路径(最最最重要)
ExecReload指明程序重新加载unit要运行的命令或脚本的绝对路径(最最最重要)
Restart当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
PrivateTmp设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
Install字段的常用选项
Alias别名,可使用systemctl command Alias.service
RequiredBy被哪些units所依赖,强依赖
WantedBy被哪些units所依赖,弱依赖(一般会写一个弱依赖,等下看实操案例)
Also安装本服务的时候还要安装别的相关服务

4、关于systemd管理的命令学习

命令功能
systemctl   start 软件名开启进程
systemctl   stop 软件名关闭进程
systemctl  status 软件名查看进程状态
systemctl   restart 软件名重启进程(先关闭后启动)
systemctl   reload 软件名重新加载(不关闭的状态下更新)
systemctl   enable 软件名开机自启动
systemctl   enable --now 软件名开启自启动并现在启动
systemctl   disable 软件名开机不自启
systemctl   disable  --now 软件名开机不自启并现在关闭
systemctl   daemon-reload 

重新加载新服务,让系统识别
就是/usr/lib/systemd/system/这个文件夹加入内容后需要刷新一下

daemon是守护进程的意思

5、运行级别

运行级别Systemd的target说明
0target关机状态(也可以用poweroff关机)
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2multi-user.target与3的区别是不支持nfs功能。默认等同于3
3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别(支持nfs)
4multi-user.target保留的运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作环境
6reboot.target重新启动(也可以用reboot)

查看当前的默认运行级别:systemctl  get-default

修改默认运行级别:systemctl set-default 加运行级别英文表达式

查看当前运行级别:runlevel

[root@localhost ~]#runlevel
N 5

# N表示前一次的运行级别
# 5表示当前运行级别

[root@localhost ~]#init 3

[root@localhost ~]#runlevel
5 3

二、编译安装nginx,以及手写service配置文件,请看注释

cd  /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf   nginx-1.18.0.tar.gz
cd  nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 
#安装依赖环境

mkdir /apps/nginx -p    

./configure   --prefix=/apps/nginx
##检测安装环境,安装去指定目录,或者选择安装功能

##指明安装路径
make
##编译 将人类的高级语言翻译成二进制
make  install
##将安装好的软件放入指定路径

ln -s /apps/nginx/sbin/nginx   /usr/sbin/nginx 
#做软链接 
##手写service配置文件

vim  /usr/lib/systemd/system/nginx.service

[Unit]
Description=The nginx HTTP and reverse proxy server
#描述软件的功能,查看进程状态的时候,会有这一段描述

[Service]
PIDFile=/apps/nginx/logs/nginx.pid
#这里指明了这个pid号的配置文件存放位置,约定俗成一般存放在安装服务的logs中,以上nginx服务编译安装在/apps/nginx中,所以路径更改为/apps/nginx/logs/nginx.pid,一旦启动进程,nginx.pid文件会自动创建

ExecStart=/apps/nginx/sbin/nginx
#使用绝对路径启动

ExecStop=/usr/bin/kill -s TERM $MAINPID
#杀死进程

ExecReload=/apps/nginx/sbin/nginx -s reload
#重新加载

[Install]
WantedBy=multi-user.target
安装在字符界面(3)




##结束以后加上  让系统识别到这个程序
systemctl daemon-reload

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

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

相关文章

AI+BI行业数字化转型研讨会 - 总结精华回顾

带您一起观看研讨会精彩内容回顾! || 导语 AIBI行业数字化转型研讨会—引领未来,智慧转型 德昂信息技术(北京)有限公司于2023年10月26日成功举办了AIBI行业数字化转型研讨会。此次盛会汇聚了产业精英、企业领袖以及技术专家,共同探讨在快速…

白盒测试用例的设计(图文讲解,超详细)

正文 语句覆盖:每条语句至少执行一次。判定覆盖:每个判定的所有可能结果至少出现一次。(又称“分支覆盖”)条件覆盖:每个条件的所有可能结果至少执行一次。判定/条件覆盖:一个判定中的每个条件的所有可能结…

多行业万能预约门店小程序源码系统 轻松预约 避免排队 带完整搭建教程

大家好啊,今天源码小编来给大家分享一款超级好用的多行业万能预约门店小程序源码系统。随着人们的生活节奏越来越快,对方便、快捷的服务需求越来越高。在消费升级的大背景下,多行业万能预约门店小程序源码系统的开发应运而生,旨在…

使用内网穿透工具,远程测试本地接口

学习目标: 目标 含义: 内网穿透工具是一种能够帮助没有公网IP或者动态IP用户进行远程访问内网应用的工具。通过内网穿透,用户无论身处任何网络环境,都可以方便地访问企业内部的ERP、OA、CRM等应用。内网穿透工具还支持默认的Htt…

XCC批量更新固件微码

适用: XCC Web界面微码批量更新,通过NFS或CIFS存储库更新所有适用于此服务器的固件微码,实现减少操作步骤,缩短时间周期。 更新事项 更新所有符合XCC更新规则的固件微码,包括UEFI、XCC、LXPM、网卡、RAID卡、RAID H…

【广州华锐互动】影视制作VR在线学习:身临其境,提高学习效率

随着科技的不断发展,影视后期制作技术也在日新月异。然而,传统的教学方式往往难以满足学员的学习需求,无法充分展现影视后期制作的魅力和潜力。近年来,虚拟现实(VR)技术的崛起为教学领域带来了新的机遇。通过VR教学课件&#xff0…

iOS代码混淆----自动

​ 先大致解释一下“编译"、"反编译": 编译:就是把千千万万行字符串(也叫代码,或者源文件),变成010101010101(机器码,也叫目标代码) 编译过程:预处理-编译-汇编-链接 我的脚本运行在预处理阶段。 反…

技术干货 | GreatDB新一代读写分离架构,如何炼就近乎0损耗的性能?

优化数据库性能并降低成本是每位架构师和DBA都必须面对的挑战。其中,读写分离是一种常见方法:即通过将读操作和写操作分发到不同的数据库实例,实现多副本负载和性能提升。 传统的中间件方案,例如基于Proxysql、HAProxy、MySQL Ro…

社科赛斯预测考研趋势,竞争白热化后,稳上岸还是冲名校?

对于考研党来说,择校应该是备考过程中最纠结的一件事情了。这几年来影响院校选择的情况愈加复杂多变,单一志愿的限制下,如何预测报名走向,如何选择院校才能够成功上岸,不像是一个人的战斗,更像是一场几百万…

机器学习基础之《回归与聚类算法(5)—分类的评估方法》

问题:上一篇的案例,真的患癌症的,能被检查出来的概率? 一、精确率和召回率 1、混淆矩阵 在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适…

法大大助力“民营旅行社第一股”数字化创新!

根据中国文旅部统计数据显示,2010-2019年,国内旅游市场持续平稳增长,2019年国内旅游人数突破60亿人次,而进入2020年,疫情的暴发使得全球旅游业遭受大创,国内旅游人次也跌至28.79亿人次。如今伴随着政策及环…

美元持续下跌,亚洲新兴市场货币有望脱颖而出?

KlipC报道:在过去几个月,美元大跌成了外汇市场最显眼的主题,追踪美元兑其他十种货币汇率的彭博美元现货指数上周也重挫了近1.5%,创下7月以来最大的周跌幅。 周一(11月6日),由于美联储减弱强硬言…

电路设计中的 “热地” 和 “冷地”

一次跳闸事故引起的对 “热地” 的认识 ...... by 矜辰所致前言 最近做了一个简单的小设备,从某宝采购的便宜的成品带外壳,自己改造一下换成带无线通讯的产品,使用过程中忽略了阻容降压只有 “ 热地 ” 的问题,整得跳闸了好几次…

大数据之LibrA数据库系统告警处理(ALM-12030 无合法license存在)

告警解释 系统在安装集群后和每天零点检查当前系统中是否存在合法的license文件,如果没有则产生该告警。 导入合法license文件时,告警恢复。 说明: 如果当前集群使用节点数小于等于10节点(不包含管理节点)&#xf…

RHCE 9.0培训课程之容器技术的运行

红帽RHCE9.0学什么内容,新版有什么变化-CSDN博客文章浏览阅读102次。红帽是首个(也是全球最大、全球领先)的企业开源软件解决方案提供商,在过去 20 几年里,红帽已经成为开源社区里令人尊敬的成员,赞助了数百…

k8s-----数据存储

目录 一、数据存储的概念 二、基本存储 1、EmptyDir存储卷 2、hostPath存储卷 3、nfs共享存储卷 三、高级存储 1、PV(持久化卷) 2、PVC(持久化卷声明) 3、静态PV实验 4、动态PV实验 4.1 在stor01节点上安装nfs&#xf…

(Git)git clone报错——SSL certificate problem: self signed certificate

(Git)git clone报错——SSL certificate problem: self signed certificate 克隆代码时报错 问题分析 提示信息为SSL认证失败,可以关闭SSL的认证。 公司bitbucket只支持https地址,需要client配置忽略https证书检验。 解决方法 在克隆前输入下边命令&…

G-LAB IT实验室【11月】网工公开课 即将开始~

带你一起走进网工的世界!G-LAB网工入门免费公开课即将开讲!无论是想学习基础网络组网还是网络互通技术实施,这个公开课都是你不容错过的! 公开课课程为期两天,11月7日&11月8日晚20:00 分享主题…

TypeScript学习Ts的类型声明,关于类

TypeScript是什么? 以JavaScript为基础构建的语言一个JavaScript的超集可以在任何支持JavaScript的平台上执行TypeScript扩展了JavaScript并添加了类型TS不能被JS解析器直接执行 TypeScript开发环境搭建 下载Node.js安装Node.js使用npm全局安装TypeScript&#x…

三国志14信息查询小程序(历史武将信息一览)制作更新过程05-后台接口的编写及调用

1,创建ASP.NET Web API项目 生成完毕,项目结构如下: 运行看一下: 2,后台接口编写 (1)在Models文件夹中新建一个sandata.cs文件(就是上篇中武将信息表的model文件) u…