Ubuntu 下 systemd 介绍

系列文章目录
Linux内核学习
Linux 知识(1)
Linux 知识(2)
WSL Ubuntu
QEMU 虚拟机
Linux 调试视频
PCIe 与 USB 的补充知识
vscode 使用说明
树莓派 4B 指南
设备驱动畅想
Linux内核子系统
Linux 文件系统挂载
QEMU 通过网络实现共享文件
OrangePi 学习摘录 —— 制作桌面版镜像
Radxa 学习摘录
Rockchip RK3399 - 引导流程和准备工作
制作Ubuntu根文件
制作RK3568 ubuntu20.04桌面版镜像
Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统
文章目录
- 系列文章目录
- 1、init 启动方式
- 2、相关目录介绍
- 3、systemd 工作流程
- 1. 启动阶段
- 2. 加载配置文件
- 3. 确定运行模式
- 4. 启动基础服务
- 5. 启动目标服务
- 6. 服务管理
- 7. 日志管理
- 8. 资源控制
- 9. 故障恢复
- 总结
- 4、写一个 systemd 配置文件
- 1. 创建服务单元文件
- 2. 编写服务配置
- 3. 配置文件解析
- 4. 加载并启动服务
- 5. 注意事项
1、init 启动方式
init 进程启动后,负责初始化用户空间的系统服务和应用程序:
-
SysV init(传统方式):
从/etc/inittab文件读取配置,确定默认运行级别(如多用户模式或图形界面模式)。
启动基本系统服务,如网络服务、系统日志、用户登录服务(getty 等)。 -
systemd(现代主流方式,Ubuntu 从 15.04 开始默认使用):
系统大部分组件被建模为systemd服务。
通过目标单元(如 multi-user.target 或 graphical.target)协调服务启动顺序。
自动优化启动流程,减少依赖和启动时间。
2、相关目录介绍
以下是 systemd 功能相关的目录介绍:
/usr/lib/systemd/system
- 用途 :存放由软件包安装的
systemd单元文件,包括各种服务(.service)、目标(.target)、挂载(.mount)等单元文件。 - 特点 :该目录下的配置文件是由软件包管理器(如 apt、rpm 等)安装软件时自动放置的,通常不需要用户手动修改。它为系统提供了各种预定义的服务和功能配置。
/run/systemd/system
- 用途 :存放系统运行时动态生成的单元文件。这些文件通常是在系统运行过程中,由各种服务或进程根据需要创建的。
- 特点 :该目录下的配置文件具有中等优先级,一般很少被手动修改,除非需要调整程序运行时的一些参数,即 Session 级别的参数。
/etc/systemd/system
- 用途 :存放系统管理员自定义的
systemd单元文件,或者通过systemctl enable命令创建的开机启动服务的符号链接。 - 特点 :该目录下的配置文件优先级最高,如果同一选项在多个目录中都配置了,这里的配置会覆盖其他目录的配置。系统管理员可以在此目录中创建自己的单元文件,或者通过符号链接的方式启用或禁用服务。
/lib/systemd/system
- 用途 :与
/usr/lib/systemd/system目录相同,用于存放软件包安装的 systemd 单元文件。 - 特点 :在许多 Linux 系统中,/lib 目录实际上是 /usr/lib 的符号链接,因此这两个目录在实际使用中是等价的。
3、systemd 工作流程
systemd 是现代 Linux 系统中广泛使用的初始化系统和服务管理器,负责在系统启动时管理和启动各种服务、资源和进程。以下是 systemd 的工作流程:
1. 启动阶段
- 内核启动
systemd:- 内核加载完成后,会启动第一个用户空间进程
systemd(PID=1)。systemd 是现代 Linux 系统的初始化进程,取代了传统的 init 进程。 systemd会读取配置文件(如/etc/systemd/system/default.target),确定系统的默认运行模式(如多用户模式或多用户图形界面模式)。
- 内核加载完成后,会启动第一个用户空间进程
2. 加载配置文件
- 系统初始化配置
systemd从/etc/systemd/system.conf文件中加载系统初始化配置,包括系统的运行模式、默认的依赖关系模式等。
- 单元文件查找
- 系统启动时,
systemd首先会读取/etc/systemd/system、/usr/lib/systemd/system和/run/systemd/system目录中的单元文件(例如.service、.target、.socket等)。其中:/etc/systemd/system:优先级最高,存放系统管理员自定义或使用 systemctl enable 启用的单元文件。/usr/lib/systemd/system:存放软件包安装的默认单元文件。/run/systemd/system:存放系统运行时生成的临时单元文件。
- 系统启动时,
3. 确定运行模式
- 运行模式(Target):
systemd使用target来定义系统的运行模式。常见的target包括:multi-user.target:多用户命令行模式。graphical.target:图形化多用户模式。
- 默认运行模式由
/etc/systemd/system/default.target文件指定。
4. 启动基础服务
- 基础服务启动:
- systemd 会启动一些基础服务,如:
- udev:管理设备节点。
- systemd-logind:管理用户会话。
- systemd-journald:管理日志系统。
- 这些服务是系统运行的基础设施,必须优先启动。
- systemd 会启动一些基础服务,如:
5. 启动目标服务
- 根据 target 启动服务:
- systemd 会根据目标 target 文件(如 multi-user.target 或 graphical.target)启动相关服务。
- 服务的配置文件通常位于
/etc/systemd/system/<target>.wants/目录下。 - 服务启动时,systemd 会自动解析服务之间的依赖关系,并按需并行启动服务。
6. 服务管理
-
服务生命周期管理:
- systemd 提供了 systemctl 命令来管理服务,例如:
systemctl start <service>:启动服务。systemctl stop <service>:停止服务。systemctl restart <service>:重启服务。systemctl status <service>:查看服务状态。
- systemd 提供了 systemctl 命令来管理服务,例如:
-
开机自启管理:
通过systemctl enable <service>和systemctl disable <service>命令,可以启用或禁用服务的开机自启动。
7. 日志管理
- 日志记录:
systemd-journald负责记录系统日志,日志存储在内存和磁盘中,便于快速查询。
- 日志查询:
- 使用
journalctl命令可以查看日志,例如:journalctl -u <service>:查看指定服务的日志。journalctl -b:查看本次启动的日志。journalctl -f:实时查看最新日志。
- 使用
8. 资源控制
- 资源隔离:
- systemd 使用控制组(cgroups)来隔离和限制服务的资源使用,例如内存、CPU 等。
- 沙盒运行:
- 可以通过配置文件中的选项(如 ProtectSystem=strict 和 PrivateTmp=true)增强服务的安全性。
9. 故障恢复
- 自动重启服务:
- 在服务配置文件中设置 Restart=on-failure,当服务崩溃时,systemd 会自动重启服务。
总结
systemd 的工作流程包括从系统启动到服务管理的全过程,其核心特点是:
- 并行启动:通过并行启动服务,显著缩短系统启动时间。
- 依赖管理:自动解析服务之间的依赖关系,确保服务按正确顺序启动。
- 统一管理:通过 systemctl 和 journalctl 命令,提供了一致的服务和日志管理接口。
4、写一个 systemd 配置文件
systemd 使用单元文件(unit files)来管理各种系统资源。以下是一个简单的自定义服务配置示例,我们将创建一个名为 my-custom-service.service 的服务。
1. 创建服务单元文件
在 /etc/systemd/system/ 目录下创建一个新的单元文件,例如:/etc/systemd/system/my-custom-service.service 。
2. 编写服务配置
打开文件并添加以下内容:
[Unit]
Description=My Custom Service
After=network.target[Service]
Type=simple
User=myuser
ExecStart=/path/to/my/script.sh
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target
3. 配置文件解析
-
[Unit]节Description:服务的简短描述。After:指定该服务在 network.target 后启动,表示该服务依赖于网络服务。
-
[Service]节Type:定义服务类型,simple 表示服务启动后立即进入主进程。User:指定服务运行的用户。ExecStart:启动服务时执行的命令。ExecReload:重新加载服务时执行的命令(此处示例为发送 HUP 信号)。ExecStop:停止服务时执行的命令。Restart:指定服务在失败时的重启策略,on-failure 表示服务失败时自动重启。RestartSec:设置重启服务前的等待时间。
-
[Install]节WantedBy:指定该服务对应的目标(target),multi-user.target 表示在多用户模式下启动。
4. 加载并启动服务
- 重新加载 systemd 配置:
sudo systemctl daemon-reload
- 启动服务:
sudo systemctl start my-custom-service
- 设置开机自启:
sudo systemctl enable my-custom-service
- 检查服务状态:
sudo systemctl status my-custom-service
5. 注意事项
- 路径和权限:确保 ExecStart 指定的脚本路径正确,并且脚本具有可执行权限。
- 日志查看:使用 journalctl -u my-custom-service 查看服务日志,便于排查问题。
- 调试:如果服务启动失败,可以查看 /var/log/journal 中的系统日志。
通过以上步骤,你可以创建并配置一个自定义的 systemd 服务。
相关文章:
Ubuntu 下 systemd 介绍
系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 QEMU 通过网络实现…...
BERT文本分类(PyTorch和Transformers)畅用七个模型架构
(PyTorch)BERT文本分类:七种模型架构 🌟 1. 介绍 使用BERT完成文本分类任务(如情感分析,新闻文本分类等等)对于NLPer已经是很基础的工作了!虽说已迈入LLM时代,但是BERT…...
两步在 Vite 中配置 Tailwindcss
第一步:安装依赖 npm i -D tailwindcss tailwindcss/vite第二步:引入 tailwindcss 更改配置 // src/main.js import tailwindcss/index// vite.config.js import vue from vitejs/plugin-vue import tailwindcss from tailwindcss/viteexport default …...
【vmware虚拟机安装教程】
以下是在VMware Workstation Pro上安装虚拟机的详细教程: 准备工作 下载VMware Workstation Pro 访问VMware官网下载并安装VMware Workstation Pro(支持Windows和Linux系统)。安装完成后,确保已激活软件(试用版或正式…...
文字转语音(三)FreeTTS实现
项目中有相关的功能,就简单研究了一下。 说明 FreeTTS 是一个基于 Java 的开源文本转语音(TTS)引擎,旨在将文字内容转换为自然语音输出。 FreeTTS 适合对 英文语音质量要求低、预算有限且需要离线运行 的场景,但若需…...
string类详解(上)
文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...
Visual Studio Code使用ai大模型编成
1、在Visual Studio Code搜索安装roo code 2、去https://openrouter.ai/settings/keys官网申请个免费的配置使用...
外贸跨境订货系统流程设计、功能列表及源码输出
在全球化的商业环境下,外贸跨境订货系统对于企业拓展国际市场、提升运营效率至关重要。该系统旨在为外贸企业提供一个便捷、高效、安全的订货平台,实现商品展示、订单管理、物流跟踪等功能,满足跨境业务的多样化需求。以下将详细阐述外贸订货…...
TraeAi上手体验
一、Trae介绍 由于MarsCode 在国内由于规定限制,无法使用 Claude 3.5 Sonnet 模型,字节跳动选择在海外推出 Trae,官网:https://www.trae.ai/。 二、安装 1.下载安装Trae-Setup-x64.exe 2.注册登录 安装完成后,点击登…...
深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析
修改内容时间2.4.1处理请求的流程,引用更好的流程图2025.02.11首发2025.02.08 深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析 深入解析 vLLM:高性能 LLM 服务框架的架构之美(二)…...
thingboard告警信息格式美化
原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...
redis解决高并发看门狗策略
当一个业务执行时间超过自己设定的锁释放时间,那么会导致有其他线程进入,从而抢到同一个票,所有需要使用看门狗策略,其实就是开一个守护线程,让守护线程去监控key,如果到时间了还未结束,就会将这个key重新s…...
Python函数的函数名250217
函数名其实就是一个变量,这个变量就是代指函数而已函数也可以被哈希,所以函数名也可以当作集合中的元素,也可作为字典的key值 # 将函数作为字典中的值,可以避免写大量的if...else语句 def fun1():return 123 def fun2():return 4…...
Unity 获取独立显卡数量
获取独立显卡数量 导入插件包打开Demo 运行看控制台日志 public class GetGraphicCountDemo : MonoBehaviour{public int count;// Start is called before the first frame updatevoid Start(){count this.GetIndependentGraphicsDeviceCount();}}...
JAVA生产环境(IDEA)排查死锁
使用 IntelliJ IDEA 排查死锁 IntelliJ IDEA 提供了强大的工具来帮助开发者排查死锁问题。以下是具体的排查步骤: 1. 编写并运行代码 首先,我们编写一个可能导致死锁的示例代码: public class DeadlockExample {private static final Obj…...
如何正确安装Stable Diffusion Web UI以及对应的xFormers
本文是我总结的步骤,验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了,官方和网上的步骤都是残缺和分散的,加上国内网络速度不理想,所以需要一些额外步骤,之前研究出…...
机器学习_14 随机森林知识点总结
随机森林(Random Forest)是一种强大的集成学习算法,广泛应用于分类和回归任务。它通过构建多棵决策树并综合它们的预测结果,显著提高了模型的稳定性和准确性。今天,我们就来深入探讨随机森林的原理、实现和应用。 一、…...
机器学习基本篇
文章目录 1 基本概念2 基本流程2.0 数据获取2.1 预处理2.1.0 认识数据认识问题2.1.1 不平衡标签的处理a.随机过采样方法 ROS,random over-samplingb. SMOTE synthetic minority Over-Sampling Technique2.2 缺失值处理2.3 数据清洗2.3.0离散特征编码2.3.1 连续特征处理归一化标…...
vue2.x与vue3.x生命周期的比较
vue2.x 生命周期图示: new Vue() | v Init Events & Lifecycle | v beforeCreate | v created | v beforeMount | v mounted | v beforeUpdate (when data changes) | v updated | v beforeDestroy (when vm.…...
接口测试及常用接口测试工具(Postman/Jmeter)
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
