Linux系统—利用systemd管控系统以及服务详解(十四)
本文为Ubuntu Linux操作系统- 第十四弹~~
新的一周开始了,时间过得真快,这星期就要冬至啦!!
今天继续Linux系统高级管理板块,主要讲述使用systemd管控系统和服务~
上期回顾:“Linux系统—进程管理详解”
更多Linux 相关内容请点击👉“Linux专栏”~
😎焰之拿瓦,吞噬猛焰的力量!合体!
文章目录
- systemd与系统初始化
- SysVinit初始化方式
- 优点:
- 缺点:
- Upstart初始化方式
- 工作流程
- 特点
- systemd初始化方式
- 特点
- systemd 主要概念和术语
- 核心概念
- 单元(unit)
- 启动目标(Target)和运行级别(Runlevel)
- 依赖关系
- systemd事务
- `systemd`单元文件
- 单元文件与启动目标
- 单元文件格式
- 编辑单元文件
- `target`单元文件
- systemctl命令
- systemctl 语法
- systemd单元管理
- 单元活动状态
- 查看单元
- 查看单元的状态
- 单元状态转换操作
- 列出单元文件(可用单元)
- 查看单元文件状态
- 单元**文件**状态转换操作
- 管理单元依赖关系
- 单元文件的状态
- 编辑单元文件
- systemd管理Linux服务
- 命令大全
- 创建自定义服务
- Linux系统启动过程
- 检测和分析systemd启动过程
- 管理启动目标
systemd与系统初始化
SysVinit初始化方式
Unix
和类Unix
操作系统中使用的传统初始化系统- 主要功能是管理和控制系统启动和关闭过程中的各种服务。
SysVinit
使用运行级别(Runlevel
)来定义系统的不同状态。SysVinit
利用/etc/inittab
文件配置文件,该文件定义了系统的默认运行级别以及其他初始化任务。
优点:
sysVinit
初始化方式原理简单,易于理解; 可以依靠Shell
脚本控制服务启动,服务脚本编写比较容易
缺点:
sysVinit
启动是线性、顺序的,启动过程比较慢
Upstart初始化方式
Upstart
是一种事件驱动的初始化系统,最初由Ubuntu
开发,用来替代传统的SysVinit
Upstart
系统是并行启动服务的机制,并根据系统事件动态地启动或停止服务Job
(工作): Upstart中,Job
是一个工作单元,负责完成特定任务
Job具体分为三种类型:
Task Job
:执行后会在一定时间内完成的任务。
Service Job
:作为后台服务运行的进程。
Abstract Job
:用于内部机制,不直接与用户交互。
Event
(事件): 事件是Upstart中触发Job
执行的关键- 配置文件位于
/etc/init/
目录下,文件扩展名为.conf
,这些文件定义了Job的行为、依赖关系以及触发事件等
工作流程
系统启动时,Upstart会发送一系列事件,这些事件触发相应的Job执行。每个Job在执行过程中可能会触发其他事件,从而形成一种事件驱动的初始化流程
特点
- 所有服务和任务都是由事件驱动的,
Upstart
是并行的。 - 可充分利用计算机多核的特点,大大减少启动所需的时间,提高系统启动速度。
- Ubuntu从6.10版开始支持
Upstart
方式,同时也使用SysVinit
UpStart
主要实现了服务的即插即用。
systemd初始化方式
- 与
Upstart
一样,也是并行启动服务的机制 systemd
系统初始化使用systemd
取代init
,作为系统第一个进程。- 不通过
init
脚本来启动服务,而是采用一种并行启动服务的机制
特点
- 使用
单元文件
替换之前的初始化脚本
。 - 利用启动目标(
Target
)替代运行级别。 - systemd使用类似缓冲池的办法解决服务之间的依赖性;提高了并行启动能力,极大地缩短了系统启动时间。
systemd
与sysVinit
兼容,支持并行化任务,按需启动守护进程。- Ubuntu从15.04版开始支持
systemd
systemd 主要概念和术语
核心概念
单元(unit)
启动目标(Target)和运行级别(Runlevel)
依赖关系
指在单元文件中使用关键字来描述单元之间的依赖关系
systemd事务
-
systemd
能保证事务完整性,旨在保证多个依赖的单元之间没有循环引用。 -
systemd
将单元之间的依赖关系分为两种:required
(强依赖)和wants
(弱依赖)
systemd
单元文件
单元文件与启动目标
- 传统的方案:服务启动脚本对应运行级别
systemd
的方案:单元文件对应启动目标- 将基本的单元文件存放在
/usr/lib/systemd/system/
目录下,不同的启动目标要装载的服务等单元的配置文件则以软链接
方式映射到/etc/systemd/system/
目录下对应的启动目标子目录下,如multi-user.target
装载的单元的配置文件链接到/etc/systemd/system/multi-user.target.wants/
目录下。 - 在
/etc/systemd/system
目录下有多个*.wants
子目录,放在该子目录下的单元文件等同于在[Unit]
节中的Wants
字段,也就是该单元启动时还需启动这些单元
单元文件格式
[Unit]
Description=CUPS Scheduler
Documentation=man:cupsd(8)
[Service]
ExecStart=/usr/sbin/cupsd -I
Type=simple
Restart=always
[Install]
Also=cups.socket cups.path
WantedBy=printer.target
编辑单元文件
步骤:
- 在
/etc/systemd/system/
目录创建单元文件。 - 修改该文件权限,确保只能被
root
用户编辑。 - 在该文件中添加以下配置信息。
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PrivateTmp=true
Restart=on-abort
[Install]
WantedBy=multi-user.target
- 通知systemd该单元已添加,并开启该服务。
target
单元文件
- 启动目标使用
target
单元文件描述,target
单位文件扩展名是.target
。 target
单元文件的唯一目的是将其他systemd
单元文件通过一连串的依赖关系组织在一起。- 下面以
graphical.target
单元文件举例
graphical.target
单元用于启动一个图形会话,systemd
会启动类似于GNOME
显示管理(gdm.service)、账户服务(accounts-daemon
)这样的服务,并且会激活multi-user.target
单元。
而multi-user.target
又会激活basic.target
,basic.target
又会激活sysinit.target
,从而嵌套组合了多个目标,完成复杂的启动管理。
systemctl命令
systemd
最主要的命令行工具是systemctl
- 负责控制systemd系统和服务管理器
systemctl 语法
systemctl [选项...] 命令 [单元文件名...]
- 不带任何选项和参数运行
systemctl
命令将列出系统已启动(装载)的所有单元 - 执行不带参数的
systemctl status
命令将显示系统当前状态 - systemctl命令的部分选项提供有长格式和短格式,如
--all
和-a
systemd
还可以控制远程系统,管理远程系统主要是通过SSH
协议
systemd单元管理
单元活动状态
高级表示形式:
active
(活动的):表示正在运行inactive
(不活动的):表示没有运行failed
(失败的):表示运行不成功
低级表示形式:
running
:表示一次或多次持续地运行exited
:表示成功完成一次性配置,仅运行一次就正常结束,目前已没有该进程运行waiting
:表示正在运行中,不过还需再等待其他事件才能继续处理dead
:表示没有运行failed
:表示运行失败mounted
:表示成功挂载(文件系统)plugged
:表示已接入(设备)
查看单元
列出所有已装载(Loaded
)的单元
systemctl list-units
- 加上选项
--all
列出所有单元,包括没有找到配置文件的或者运行失败的。 - 加上选项
--failed
列出所有运行失败的单元。 - 加上选项
--state
列出特定状态的单元 - 加上选项
--type
列出特定类型的单元。
查看单元的状态
systemctl status
# 不带参数的将显示系统当前状态
systemctl status [单元文件名...]
#该命令将查看特定单元的状态
单元状态转换操作
start
:启动单元使之运行。
stop
:停止单元运行。
restart
:重新启动单元使之运行。
reload
:重载单元的配置文件而不重启单元。
try-restart
:如果单元正在运行就重启单元。
reload-or-restart
:如有可能重载单元的配置文件,否则,重启单元。
reload-or-try-restart
:如有可能重载单元的配置文件,否则,若正在运行则重启单元。
kill
:杀死单元,以结束单元的运行进程
列出单元文件(可用单元)
systemctl list-unit-files
列出系统中所有已安装的单元文件,即所有可用的单元。- 加上选项
--type
或-t
列出特定类型的可用单元。
查看单元文件状态
systemctl status
显示特定单元的状态时会显示对应的单元文件的状态。systemctl is-enabled
专门用于检查指定的单元文件是否允许开机自动启动
单元文件状态转换操作
enable
为单元文件建立启动连接,设置单元开机自动启动
disable
删除单元文件的启动连接,设置单元开机不自动启动
mask
将单元文件连接到/dev/null
,禁止设置单元开机自动启动。
unmask
允许设置单元开机自动启动
管理单元依赖关系
列出指定单元的所有依赖
systemctl list-dependencies [单元文件名...]
单元文件的状态
enabled
:已建立启动连接,将随系统启动而启动,即开机时自动启动。
disabled
:没建立启动连接,即开机时不会自动启动
static
: 该单元文件没有[Install]
部分(无法执行),只能作为其他单元文件的依赖
masked
:该单元文件被禁止建立启动连接,无论如何都不能启动
generated
:该单元文件是由单元生成器动态生成的。
编辑单元文件
systemctl
提供专门的命令edit
来打开文本编辑器编辑指定的单元文件- 修改配置文件要让
systemd
重新装载配置文件
systemctl daemon-reload
- 重新启动,使修改生效
systemctl restart 单元文件
systemd管理Linux服务
命令大全
- 启动服务
systemctl start 服务名.service
- 停止服务
systemctl stop 服务名.service
- 重启服务
systemctl restart 服务名.service
- 查看服务运行状态
systemctl status 服务名.service
- 重载服务的配置文件而不重启服务
systemctl reload 服务名.service
- 条件式重启服务
systemctl tryrestart 服务名.service
- 重载或重启服务
systemctl reload-or-restart 服务名.service
- 重载或条件式重启
systemctl reload-or-try-restart 服务名.service
- 查看服务是否激活(正在运行)
systemctl is-active 服务名.service
- 查看服务启动是否失败
systemctl is- failed 服务名.service
- 杀死服务
systemctl kill 服务名.service
- 查看所有可用的服务
systemctl list-unit-files --type=service
- 查看某服务是否能够开机自启动
systemctl is-enabled 服务名.service
- 设置服务开机自动启动
systemctl enable 服务名.service
- 禁止服务开机自动启动
systemctl disable 服务名.service
- 禁止某服务设定为开机自启
systemctl mask 服务名.service
- 取消禁止某服务设定为开机自启
systemctl unmask 服务名.service
- 加入自定义服务
步骤:
- 创建相应的单元文件
- 运行命令
systemctl daemon-reload
- 删除服务
步骤:
- 运行命令
systemctl stop 服务名.service
- 删除相应的单元文件
创建自定义服务
服务单元文件的重点是[Service]
节,常用的指令有
Type
:配置单元进程启动时的类型,影响执行和关联选项的功能。
ExecStart
:指定启动单元的命令或者脚本,ExecStartPre
和ExecStartPost节
指定在ExecStart
之前或者之后用户自定义执行的脚本
ExecStop
:指定单元停止时执行的命令或者脚本。
ExecReload
:指定单元重新装载是执行的命令或者脚本。
Restart
:若设置为always
,服务重启时进程会退出,会通过systemctl
命令执行清除并重启的操作。
RemainAfterExit
:若设置为true
,服务会被认为是在活动状态
Linux系统启动过程
BIOS启动—> 启动引导加载程序 —>装载内核—>系统初始化
检测和分析systemd启动过程
- 查看启动耗时,也就是内核空间和用户空间启动时所花的时间
systemd-analyze time
- 查看正在运行的每个单元的启动耗时,并按照时长排序
systemd-analyze blame
检查所有系统单元是否有语法错误
systemd-analyze verify
分析启动时的关键链,查看严重消耗时间的单元列表
systemd-analyze critical-chain
管理启动目标
- 查看当前的启动目标
- 切换到不同的目标
systemctl isolate 目标名.target
- 管理默认启动目标
- 进入系统救援模式和紧急模式。
sudo systemctl rescuesudo systemctl emergency
Ubuntu Linux板块的Linux系统的高级管理内容今天先讲到这里~~~
想要了解更多内容点击练小杰的CSDN!!!
这周继续努力搬砖,明天见,各位大佬!!😄
相关文章:

Linux系统—利用systemd管控系统以及服务详解(十四)
本文为Ubuntu Linux操作系统- 第十四弹~~ 新的一周开始了,时间过得真快,这星期就要冬至啦!! 今天继续Linux系统高级管理板块,主要讲述使用systemd管控系统和服务~ 上期回顾:“Linux系统—进程管理详解” 更…...
人工智能 AI 大模型研究设计与实践应用技术毕业论文
标题:人工智能 AI 大模型研究设计与实践应用技术 内容:1.摘要 人工智能 AI 大模型是当前人工智能领域的研究热点之一,它具有高度的通用性、灵活性和智能性,可以应用于多种领域,如自然语言处理、计算机视觉、语音识别等。本文旨在探讨人工智能…...
已有 containerd 的情况下部署二进制 docker 共存
文章目录 [toc]学习目的开始学习dockerd启动 containerd准备配置文件启动 containerd 启动 docker准备配置文件启动 docker 环境验证停止 docker 和 containerd 学习目的 使用容器的方式做一些部署的交付,相对方便很多,不需要担心别人的环境缺少需要的依…...

VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)
名人说:一点浩然气,千里快哉风。—— 苏轼《水调歌头》 创作者:Code_流苏(CSDN) 目录 一、Python环境安装二、VScode下载及安装三、VSCode配置Python环境四、运行测试五、背景图设置 很高兴你打开了这篇博客,更多详细的安装教程&…...

vue+springboot+cas配置及cookie传递问题
cookie的注意事项 前边的文章已经介绍过cookie的基本信息,这里再次说明一点:cookie是无法进行跨域传递的,很多时候cookie无法设置和传递都是因为跨域问题,ip/端口不一致。 主要就是:被设置cookie和要传递cookie的地址…...

0009.基于springboot+layui的ERP企业进销存管理系统
一、系统说明 基于springbootlayui的ERP企业进销存管理系统,系统功能齐全, 代码简洁易懂,适合小白学编程,课程设计,毕业设计。 二、系统架构 前端:html| layui 后端:springboot | mybatis| thymeleaf 环境:jdk1.8 |…...

ZYNQ初识2(zynq_7010)基于vivado,从PL端调用PS端的时钟
由于需要进行一些FPGA的简单开发,但板载PL端没有焊接晶振,所以需要从PS端借用时钟到PL端使用。 首先新建项目,根据自己的板载选择芯片,我的板载芯片是zynq_7010。 一路next,在自己的vivado的工作文档新建文件夹并给自…...
Android详解——ConstraintLayout约束布局
目录 一、ConstraintLayout概述 二、ConstraintLayout属性介绍 1. 相对位置 2. 边距 3. 中心和偏移位置 中心位置 偏移位置 4. 圆形位置 5. 可见性 6. 尺寸约束 最小尺寸 WRAP_CONTENT :强制约束 MATCH_CONSTRAINT Min和Max 百分比尺寸 比率 7. 链式布局 创建…...

docker简单命令
docker images 查看镜像文件 docker ps -a 查看容器文件 docker rm 0b2 删除容器文件,id取前三位即可 docker rmi e64 删除镜像文件(先删容器才能删镜像),id取前三位即可 在包含Dockerfile文件的目录…...
【linux】shell(36)-文件操作
1. 文件创建 1.1 使用 touch 命令创建空文件 touch filename创建一个名为 filename 的空文件。如果文件已存在,touch 会更新该文件的时间戳。 示例: touch file1.txt1.2 使用重定向符创建文件 > filename使用 > 符号创建一个空文件。如果文件…...

c语言——数据结构【链表:单向链表】
上篇→快速掌握C语言——数据结构【创建顺序表】多文件编译-CSDN博客 一、链表 二、单向链表 2.1 概念 2.2 单向链表的组成 2.3 单向链表节点的结构体原型 //类型重定义,表示存放的数据类型 typedef int DataType;//定义节点的结构体类型 typedef struct node {union{int l…...
Python 标识符是啥?
Python 的标识符就是我们写代码时用来给变量、函数、类等取名字的东西。 你写的 my_variable 是个标识符, 定义的 add_numbers 函数名也是个标识符, 甚至你写的 Cat 类名,也是标识符。 一句话总结:标识符就是代码里给“东西”起…...
视频及JSON数据的导出并压缩
npm下载安装 jszip 和 file-saver 这两个库来实现文件的压缩和保存功能: npm install jszip npm install file-saver 导入依赖库: import JSZip from jszip; import { saveAs } from file-saver; 方法实现: batchDownload() {const zip…...

VScode使用教程(菜鸟版)
目录 1.VScode是什么? 2.VScode的下载和安装? 2.1下载和安装 下载路径: 安装流程: 一、点击【Download for Windows】 二、等一小会儿的下载,找到并双击你下载好的.exe文件,开始进入安装进程 三、点…...
【漏洞复现】Grafana 安全漏洞(CVE-2024-9264)
🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:Grafana 安全漏洞 (CVE-2024-9264)漏洞编号:CVE-2024-9264 | CNNVD-202410-1891漏洞类型:命令注入、本地文件包含漏洞威胁等级:…...
Android AOSP 源码中批量替换“phone“为“tablet“的命令详解
我来帮你写一篇关于这条命令的分析博客。 Android 项目中批量替换"phone"为"tablet"的命令详解 前言 在 Android 开发中,有时我们需要批量修改资源文件中的某些文本内容。今天我们来分析一条结合了 grep 和 sed 的强大命令,该命令用于将项目中的 “ph…...
基于JavaWeb(SSM+MySQL)问卷调查管理系统设计与实现毕业论文
标题:基于 JavaWeb(SSMMySQL)问卷调查管理系统设计与实现 内容:1.摘要 摘要:本文介绍了一个基于 JavaWeb(SSMMySQL)的问卷调查管理系统的设计与实现。该系统旨在为用户提供一个高效、便捷的问卷调查工具,帮…...

域内用户枚举与密码喷洒与密码爆破
域控:192.168.72.163 攻击者:192.168.72.162 域:hacker.com 用户枚举 as-rep 回复状态判断域用户 用户存在且启用:KDC_ERR_PREAUTH_REQUIRED (需要额外的预认证) 用户存在但禁用:KDC_ERR_CLIENT_REVOKED NT Stat…...
DIY 集合求并集(union)运算的代码 ← Python
【算法分析】 已知 Python 提供了求并集运算的函数 union。代码示例如下; >>> s1{1,2,3} >>> s2{2,3,7,1,9} >>> s1.union(s2) {1, 2, 3, 7, 9} >>> 不过,知其然也要知其所以然。 本例自己 DIY 集合求并集(union…...
Redis bitmaps 使用
应用场景: 记录id为 1 的用户,2024年12月签到情况,并统计; 记录 1号签到 zxys-redis:0>setbit 1:202412 1 1 记录 2号签到 zxys-redis:0>setbit 1:202412 2 1 记录 3号未签到 zxys-redis:0>setbit 1:202412 3 0 …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...