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,旨在简化用户的调整过程并增强…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
