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

目录

一、了解服务

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.rhkb.cn/news/183033.html

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

相关文章

【C语言】函数的系统化精讲(二)

🌈write in front :🔍个人主页 : 啊森要自信的主页 🌈作者寄语 🌈: 小菜鸟的力量不在于它的体型,而在于它内心的勇气和无限的潜能,只要你有决心,就没有什么事情是不可能的…

AI系统ChatGPT程序源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

【计算机网络】数据链路层-MAC和ARP协议

文章目录 1. 认识以太网2. MAC协议MAC帧的格式MAC地址和IP地址的区别MTU 3. 局域网通信原理碰撞检测和避免 4. ARP协议ARP数据报的格式ARP缓存 1. 认识以太网 网络层解决的是跨网络点到点传输的问题,数据链路层解决的是同一网络中的通信。 数据链路层负责在同一局域…

SpringBoot + Vue2项目打包部署到服务器后,使用Nginx配置SSL证书,配置访问HTTP协议转HTTPS协议

配置nginx.conf文件,这个文件一般在/etc/nginx/...中,由于每个人的体质不一样,也有可能在别的路径里,自己找找... # 配置工作进程的最大连接数 events {worker_connections 1024; }# 配置HTTP服务 http {# 导入mime.types配置文件…

聚观早报 |小鹏P7i 550版上市;零一万物发布大模型

【聚观365】11月7日消息 小鹏P7i 550版上市 零一万物发布大模型 vivo X100现身Geekbench 小马智行与丰田联合发布Robotaxi 王云鹏出任百度IDG负责人 小鹏P7i 550版上市 小鹏P7i 550版正式上市,新车共推出550 Pro、550 Max 两款新版型,售价分别为22…

WPF中的Binding的常见知识点与技巧

完全来源于十月的寒流,感谢大佬讲解 在XAML中,可以绑定到许多不同类型的数据源和属性。以下是一些可以绑定的常见数据源和属性: 属性:可以绑定到对象的属性,例如控件的Text、Visibility、IsEnabled等属性。 集合&am…

民宿酒店服务预约小程序的作用

民宿往往是旅游者们前往某个城市感受风情常住的地方,也因此在景区或特定地方,总是不乏大小民宿品牌,但除了市场高需求外,商家们所遇的痛点也不少: 1、获客引流难 民宿生意虽然需求量高,但各家品牌众多&am…

微服务架构——笔记(3)Eureka

微服务架构——笔记(3) 基于分布式的微服务架构 本次笔记为 此次项目的记录,便于整理思路,仅供参考,笔者也将会让程序更加完善 内容包括:1.支付模块、2.消费者订单模块、支付微服务入驻Eureka、Eureka集群…

Docker 多阶段构建的原理及构建过程展示

Docker多阶段构建是一个优秀的技术,可以显著减少 Docker 镜像的大小,从而加快镜像的构建速度,并减少镜像的传输时间和存储空间。本文将详细介绍 Docker 多阶段构建的原理、用途以及示例。 Docker 多阶段构建的原理 在传统的 Docker 镜像构建…

Hive 解析 JSON 字符串数据的实现方式

文章目录 通过方法解析现实示例 通过序列化实现示例 通过方法解析现实 在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path),该方法参数解析如下: json_txt:顾名思义,就是 JSON 字符串;…

vue3项目搭建

一:介绍 Vue3 是从2018年开始研发,经过大概一年半的不断重构与试运行,最终发布于2020年9月18日。相比于 Vue2 其具有更小,更快,支持性更高等功能。因此学号 Vue3 是非常有必要的,同时 Vue2 也将会与2023年1…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观,平面的东西。程序开发也好理解就是功能实现。而前端开发,简单来说,就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、做鼠…

Java根据一个List内Object的两个字段去重

背景 在Java开发过程中,我们经常会遇到需要对List进行去重的需求。 其中常见的情况是,将数组去重,或者将对象依据某个字段去重。这两种方式均可用set属性进行处理。 今天讨论,有一个List,且其中的元素是自定义的对象&…

【JVM】JDBC案例打破双亲委派机制

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JVM 打破双亲委派机制(JDBC案例…

RK3568平台开发系列讲解(音视频篇)RTMP 推流

🚀返回专栏总目录 文章目录 一、RTMP 的工作原理二、RTMP 流媒体服务框架2.1、Nginx 流媒体服务器2.2、FFmpeg 推流沉淀、分享、成长,让自己和他人都能有所收获!😄 📢目前常见的视频监控和视频直播都是使用了 RTMP、RTSP、HLS、MPEG-DASH、 WebRTC流媒体传输协议等。 R…

Halcon WPF 开发学习笔记(1):Hello World小程序

文章目录 文章专栏视频链接Hello World训练图片训练目的 开始训练图像预处理导入图像三通道处理调用算子通道选取 滤波什么是好的滤波 增加对比度 区域选取阈值处理算子参数选择运行结果(红色为选择区域) 区域分割运行结果 特征筛选参数代码第二次,面积筛选 画选中十…

【每日一题】统计范围内的元音字符串数

文章目录 Tag题目来源题目解读解题思路方法一:遍历 其他语言python3 写在最后 Tag 【遍历】【数组】【2023-11-07】 题目来源 2586. 统计范围内的元音字符串数 题目解读 统计范围内的元音字符串数。 解题思路 方法一:遍历 遍历下标在 [left, right]…

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

一分钟精华速览 分布式链路追踪系统在企业的APM体系中扮演着重要的角色。本文分享了去哪儿旅行构建分布式链路追踪系统的实践经验。从APM整体架构设计入手,讲述了日志收集、Kafka传输和Flink任务处理等环节的性能优化实践和踩坑经验。 同时,作者结合丰…

JVM-垃圾回收

目录 1、GC过程 2、垃圾回收算法 2.1、标记-清除 2.2、标记-整理 2.3、复制 2.4、分代收集算法 3、TLAB 4、对象如何进入老年代 5、卡片标记 6、HotSpot垃圾回收器 6.1、年轻代垃圾回收器 6.2、老年代垃圾回收器 6.3、如何配置垃圾回收器 6.4、STW 7、CMS垃圾回收…

【漏洞复现】Apache_Tomcat7+ 弱口令 后台getshell漏洞

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号漏洞名称Tomcat7 弱口令 && 后台getshell漏洞漏洞评级高…