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,旨在简化用户的调整过程并增强…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...