当前位置: 首页 > news >正文

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使用类似缓冲池的办法解决服务之间的依赖性;提高了并行启动能力,极大地缩短了系统启动时间。
  • systemdsysVinit兼容,支持并行化任务,按需启动守护进程。
  • 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

编辑单元文件

步骤:

  1. /etc/systemd/system/目录创建单元文件。
  2. 修改该文件权限,确保只能被root用户编辑。
  3. 在该文件中添加以下配置信息。
[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
  1. 通知systemd该单元已添加,并开启该服务。

target单元文件

  • 启动目标使用target单元文件描述,target单位文件扩展名是.target
  • target单元文件的唯一目的是将其他systemd单元文件通过一连串的依赖关系组织在一起。
  • 下面以graphical.target单元文件举例

graphical.target单元用于启动一个图形会话,systemd会启动类似于GNOME显示管理(gdm.service)、账户服务(accounts-daemon)这样的服务,并且会激活multi-user.target单元。
multi-user.target又会激活basic.targetbasic.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
  • 加入自定义服务
    步骤:
  1. 创建相应的单元文件
  2. 运行命令systemctl daemon-reload
  • 删除服务
    步骤:
  1. 运行命令 systemctl stop 服务名.service
  2. 删除相应的单元文件

创建自定义服务

服务单元文件的重点是[Service] 节,常用的指令有

Type:配置单元进程启动时的类型,影响执行和关联选项的功能。
ExecStart:指定启动单元的命令或者脚本,ExecStartPreExecStartPost节指定在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 …...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...