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

systemd:service与target使用及相关命令


文章目录

  • 一、 unit
    • 1.1 unit常用命令
  • 二、 service系统服务
    • 2.1 unit service配置文件
      • 2.1.1 [Unit]区块
      • 2.1.2 [Service]区块
      • 2.1.3 [Install]区块
      • 2.1.4 示例介绍
    • 2.2 service常用命令
  • 三、target
    • 3.1 tartget有关命令
  • 四、其他系统命令
    • 4.1 systemctl 相关系统管理命令
    • 4.2 journalctl 相关命令
    • 4.3 systemd-analyze 分析系统启动

传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)来处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点;Systemd是用来启动守护进程,已成为大多数发行版的标准配置。

本文主要介绍systemd相关命令以及配置。


一、 unit

Systemd可以管理所有系统资源,不同的资源统称为 Unit(单位),Unit一共分成以下12种。其中最重要的是系统服务(Service )和Target,本文主要介绍这两个。

Service unit:系统服务
Target unit:多个Unit构成的一个组
Device Unit:硬件设备
Mount Unit:文件系统的挂载点
Automount Unit:自动挂载点
Path Unit:文件或路径
ScopeUnit:不是由Systemd启动的外部进程
Slice Unit:进程组
Snapshot Unit:Systemd快照,可以切回某个快照
Socket Unit:进程间通信的socket Swap Unit:swap文件 Timer Unit:定时器

1.1 unit常用命令

这里只列出可能常用的unit list相关命令

#汇总unit系统启动状态
$ systemctl status#显示单个Unit的状态
$ sysystemctl status network.service#列出正在运行的Unit
$ systemctl list-units#列出所有Unit,包括没有找到配置文件的或者启动失败的
$ systemctl list-units --all#列出所有没有运行的Unit
$ systemctl list-units --all --state=inactive#列出所有加载失败的Unit
$ systemctl list-units --failed#列出所有正在运行的、类型为service的Unit
$ systemctl list-units --type=service

二、 service系统服务

service作为unit特殊的一种,日常自定义添加系统服务,其配置过程是必不可少的,因此需要熟悉配置的常用属性。这里对这个常用的service系统服务单独讲解。

2.1 unit service配置文件

通过命令 systemctl cat xxx.service 可以看到对应服务的配置文件组成,通常.service配置文件分为如下3个区块。

[Unit]

[Service]

[Install]

2.1.1 [Unit]区块

通常是配置文件的第一个区块,用于启动顺序与依赖关系配置,以及和其他 Unit 的关系。常见字段有:

  • Description:简短描述
  • Documentation:文档地址
  • Requires:当前Unit依赖的其他Unit,如果它们没有运行,当前Unit会启动失败
  • Wants:与当前Unit配合的其他Unit,如果它们没有运行,当前Unit不会启动失败
  • BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前Unit停止运行
  • Before:如果该字段指定的Unit也要启动,那么必须在当前Unit之后启动
  • After:如果该字段指定的Unit也要启动,那么必须在当前Unit之前启动
  • Conflicts:这里指定的Unit 不能与当前Unit同时运行
  • Condition…:当前Unit运行必须满足的条件,否则不会运行
  • Assert…:当前Unit运行必须满足的条件,否则会报启动失败

2.1.2 [Service]区块

只有Service类型的Unit才有这个区块。常用字段如下:

  • Type:定义启动时的进程行为。它有以下几种值:
    Type=simple:默认值,执行ExecStart指定的命令,启动主进程
    Type=forking:以fork方式从父进程创建子进程,创建后父进程会立即退出
    Type=oneshot:一次性进程,Systemd会等当前服务退出,再继续往下执行
    Type=dbus:当前服务通过D-Bus启动
    Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
    Type=idle:若有其他任务执行完毕,当前服务才会运行
  • ExecStart:启动当前服务的命令
  • ExecStartPre:启动当前服务之前执行的命令
  • ExecStartPost:启动当前服务之后执行的命
  • ExecReload:重启当前服务时执行的命令
  • ExecStop:停止当前服务时执行的命令
  • ExecStopPost:停止当其服务之后执行的命令
  • RestartSec:自动重启当前服务间隔的秒数
  • Restart:定义何种情况Systemd会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
  • TimeoutSec:定义Systemd停止当前服务之前等待的秒数
  • RemainAfterExit:当该服务的所有进程全部退出之后, 是否依然将此服务视为活动(active)状态, 默认值为 no。这个配置主要是提供给一些并非常驻内存,而是启动注册后立即退出然后等待消息按需启动的特殊类型服务使用。
  • Environment:指定环境变量

2.1.3 [Install]区块

用来定义如何启动,以及是否开机启动。它的主要字段如下。

  • WantedBy:它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名+.wants后缀构成的子目录中
  • RequiredBy:它的值是一个或多个Target,当前Unit激活时,符号链接会放入/etc/systemd/system目录下面以Target名 + .required后缀构成的子目录中
  • Alias:当前Unit 可用于启动的别名
  • Also:当前Unit激活(enable)时,会被同时激活的其他Unit

WantedBy和RequiredBy的区别与上述[Unit]的Want和Require类似。

2.1.4 示例介绍

上面介绍的字段很多, 但实际大部分场景是用不到的,这里展示一个简单的service示例demo,方便理解(注意:注释的时候不能在每个字段的后面进行注释,否则会解析失败):

[Unit]#对该service的描述
Description=service demo 
#要在这些服务之后执行
After=sysinit.target network.service network.target  
#在 rc-local前完成
Before=rc-local.service [Service]#一次性进程,Systemd会等当前服务退出,再继续往下执行。如果Type=forking,则fork方式从父进程创建子进程,创建后父进程会立即退出
Type=oneshot  
#启动服务主程序前执行的命令,这个为等3s   
ExecStartPre= sleep 3 
# 所有进程服务退出后,是否任为active常驻状态
RemainAfterExit=yes#服务指定主程序
ExecStart=/home/demo.sh [Install]
#所属于muti-user target下,service enable后会在muti-user target自动创建软链接
WantedBy=multi-user.target  

2.2 service常用命令

对于service的管理通常涉及下面常用命令:

#查看服务启动状态
$ sudo systemctl status demo.service#使能一个服务(开机自启动)
$ sudo systemctl enable demo.service#关闭一个服务(开机不启动)
$ sudo systemctl disable demo.service#打开这个服务对应配置文件
$ sudo systemctl cat demo.service#立即启动一个服务
$ sudo systemctl start demo.service#立即停止一个服务
$ sudo systemctl stop demo.service#重启一个服务
$ sudo systemctl restart demo.service#杀死一个服务的所有子进程
$ sudo systemctl kill demo.service#重新加载一个服务的配置文件
$ sudo systemctl reload demo.service#重载所有修改过的配置文件
$ sudo systemctl daemon-reload

三、target

systemd target是systemd众多资源的一个分类,以.target结尾,所代表的意思是unit集合,即.target资源包含了一系列的.service、.target等,运行这个target会运行其包含的所有.service、.target等unit/服务。
其作用就是方便系统管理,根据用户设定,控制系统启动的相关target,达到控制不同service启动的目的。

target配置文件跟上面的service配置文件是一样的,只是target通常只有[Unit]区块(字段定义同上)。常见的target有multi-user.target,日常添加系统服务非特殊情况会放到这个target下。

3.1 tartget有关命令

#查看当前系统的所有Target
$ systemctl list-unit-files --type=target#查看一个 Target 包含的所有 Unit
$ systemctl list-dependencies demo.target#查看启动时的默认 Target
$ systemctl get-default#设置启动时的默认Target
$ sudo systemctl set-default multi-user.target#关闭前一个Target里面所有不属于后一个Target的进程
$ sudo systemctl isolate multi-user.target

其中systemctl get-default 比较常用,方便查看系统默认启动的哪个target。systemctl list-dependencies 方便确认这个target组成情况。


四、其他系统命令

4.1 systemctl 相关系统管理命令

 #命令查看Systemd的版本
systemctl --version #重启系统
$ sudo systemctl reboot#关闭系统,切断电源
$ sudo systemctl poweroff#CPU停止工作
$ sudo systemctl halt#暂停系统
$ sudo systemctl suspend#启动进入救援状态(单用户状态)
$ sudo systemctl rescue

4.2 journalctl 相关命令

journald 是 systemd 的系统日志守护进程,它从整个系统收集日志并将日志保存在二进制文件中。journalctl工具为日志分析工具,具有丰富过滤能力,可以查看所有日志(包括内核日志和应用日志)。配置文件位于:/etc/systemd/journald.conf,日志路径:/var/log/journal/
常见命令有:

#查看所有日志(默认情况下 ,只保存本次启动的日志)
$ sudo journalctl#查看内核日志(不显示应用日志)
$ sudo journalctl -k#查看系统本次启动的日志
$ sudo journalctl -b
$ sudo journalctl -b -0#查看上一次启动的日志(需更改设置)
$ sudo journalctl -b -1#显示尾部的最新10行日志
$ sudo journalctl -n#显示尾部指定行数的日志
$ sudo journalctl -n 20#实时滚动显示最新日志
$ sudo journalctl -f#查看指定进程的日志
$ sudo journalctl _PID=1#查看某个 Unit 的日志
$ sudo journalctl -u demo.service#查看指定优先级为err级别日志日志,
$ sudo journalctl -p err -b日志级别共有8级,分为:# 0: emerg# 1: alert# 2: crit# 3: err# 4: warning# 5: notice# 6: info# 7: debug#显示日志占据的硬盘空间
$ sudo journalctl --disk-usage

4.3 systemd-analyze 分析系统启动

systemd-analyze可以用于分析各个systemd服务的启动基于耗时情况,方便做性能分析。
常见命令有:

#查看启动耗时
$ systemd-analyze                                                                                       #查看每个服务的启动耗时
$ systemd-analyze blame#查看默认目标的时间关键链的树
$ systemd-analyze critical-chain# 图形化显示
systemd-analyze plot > boot.svg#显示指定服务的时间关键链的树
$ systemd-analyze critical-chain atd.service

具体systemd-analyze 分析系统启动性能见下篇文章讲解。

相关文章:

systemd:service与target使用及相关命令

文章目录 一、 unit1.1 unit常用命令 二、 service系统服务2.1 unit service配置文件2.1.1 [Unit]区块2.1.2 [Service]区块2.1.3 [Install]区块2.1.4 示例介绍 2.2 service常用命令 三、target3.1 tartget有关命令 四、其他系统命令4.1 systemctl 相关系统管理命令4.2 journalc…...

FairGuard游戏加固入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日, FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册(第六版)》。本次发布的全景图,共计展示20个一级分类、108个细分安全领域,旨在为广大企业提供网络安全产品选型参考,帮助企业了解中国网络安全技术与市场的…...

文心一言 VS ChatGPT :谁是更好的选择?

前言 目前各种大模型、人工智能相关内容覆盖了朋友圈已经各种媒体平台,对于Ai目前来看只能说各有千秋。GPT的算法迭代是最先进的,但是它毕竟属于国外产品,有着网络限制、注册限制、会员费高昂等弊端,难以让国内用户享受。文心一言…...

七街八巷×实在RPA丨财务凭证录入零出错,效率提升8倍

在如今的数字化时代,企业财务面临着海量且复杂的数据流程。特别是在凭证录入这一看似简单却又频繁的环节中,传统的手工操作已无法满足日益增长的业务需求。 中国轻食知名品牌七街八巷,通过部署实在智能集“自动化平台开箱即用解决方案咨询”…...

线性代数----------学习记录

线性代数发展历程 (1)线性方程组:例如二元一次方程组; (2)行列式:determinant,克莱默,莱布尼兹; (3)矩阵:方程个数与未知数的个数可…...

Ubuntu如何安装使用Nginx反向代理?

在Ubuntu上安装Nginx并配置使其生效是相对简单的过程。以下是一步一步的指南: 步骤 1:安装 Nginx 打开终端,并执行以下命令来安装 Nginx: sudo apt update sudo apt install nginx步骤 2:启动 Nginx 服务 安装完成…...

Linux系统——正则表达式

有一段时间本机访问量过高,如何查看日志提取出访问量前十的信息 1.使用提取命令(cut、awk、sed)提取出ip地址的那一列 2.使用sort按数字排序,将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最…...

【文本到上下文 #9】NLP中的BERT和迁移学习

​ ​ 一、说明 ​BERT:适合所有人的架构概述:我们将分解 BERT 的核心组件,解释该模型如何改变机器理解人类语言的方式,以及为什么它比以前的模型有重大进步。    ​BERT的变体: 在BERT取得成功之后,已…...

github单文件下载——DownGit

记录一下一个好用的网站,支持github中某一特定文件夹下文件的下载 选择一个合适的梯子,访问Downgit网址 https://minhaskamal.github.io/DownGit/#/home 将所需网站连接粘贴到这里,点击download即可...

Java之Stream的应用与原理分析

前言 stream是怎么做到一次迭代中将所有流操作进行叠加?stream怎么做到只有在终止操作时进行元素遍历?那中间操作是做了些什么? Stream 与集合的区别 集合是内存中的数据结构抽象,描述了数据在内存中是如何存储的。流描述了对数据…...

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支,本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 前言 主要总结工作中的疑惑点,如果你也有相应的场景,可以评论区见&…...

iperf3 打流工具的使用介绍

目录 1. iperf3简介 2. 详细命令参数 1. iperf3简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCTP与IPv4和IPv6)有关的各种参数。对于每次测试,它都会详细的带宽报告&a…...

网络异常案例一_RST

本文以及后面几篇会整理输出下以前处理过的一些网络相关的异常 4G定向卡上网问题 问题现象,自研路由器,使用运营商定向的4G卡上网,访问服务器异常,相应的开发同学反馈被服务器拒绝了; 复现问题,同步在cli…...

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件,Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户,Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…...

清空在Linux系统上的操作记录

在Linux中,操作记录通常涉及到不同的系统组件,包括bash shell的历史命令记录、系统日志文件等。以下是如何清除一些常见记录的步骤: 1. 清空bash历史命令记录history -c # 清除当前用户的bash历史记录rm -f ~/.bash_history # 删除保存在用户…...

Java链表(2)

🐵本篇文章将对双向链表进行讲解,模拟实现双向链表的常用方法 一、什么是双向链表 双向链表在指针域上相较于单链表,每一个节点多了一个指向前驱节点的引用prev以及多了指向最后一个节点的引用last: 二、双向链表的模拟实现 首先…...

Python qt.qpa.xcb: could not connect to display解决办法

遇到问题:qt.qpa.xcb: could not connect to display 解决办法,在命令行输入: export DISPLAY:0 然后重新跑python程序,解决! 参考博客:qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could …...

Compose | UI组件(八) | Dialog - 对话框

文章目录 前言Dialog 普通弹框Dialog 普通弹框的使用AlertDialog 警告弹框AlertDialog 警告弹框的使用 总结 前言 在我们传统的UI界面中,经常用到弹框,Compose也有弹框,但是Compose的弹框显示和隐藏和传统的弹框显示(show&#x…...

【Spark系列6】如何做SQL查询优化和执行计划分析

Apache Spark SQL 使用 Catalyst 优化器来生成逻辑执行计划和物理执行计划。逻辑执行计划描述了逻辑上如何执行查询,而物理执行计划则是 Spark 实际执行的步骤。 一、查询优化 示例 1:过滤提前 未优化的查询 val salesData spark.read.parquet(&quo…...

Observability:在 Elastic Stack 8.12 中使用 Elastic Agent 性能预设

作者:来自 Elastic Nima Rezainia, Bill Easton 8.12 中 Elastic Agent 性能有了重大改进 最新版本 8.12 标志着 Elastic Agent 和 Beats 调整方面的重大转变。 在此更新中,Elastic 引入了 Performance Presets,旨在简化用户的调整过程并增强…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...