Linux systemd详解

1、概念

1.1 systemd

systemd 是一个用于管理 Linux 系统启动过程和系统服务的系统和服务管理器。它被设计为取代传统的 System V init 系统,提供了更快的启动时间、并行启动服务、更好的日志记录和更强大的管理功能。

1.2 unit 

Unit 是 systemd 中所有配置文件的基本单位,用于描述系统中的各种资源,包括服务、挂载点、设备等。除了 service unit 外,还有其他类型的 unit,如 socket unit、target unit、timer unit 等。每个 unit 都有自己的配置文件,用于定义该资源的属性和行为。

[Unit]
Description=Backup Timer

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
  • [Unit]:Unit 的基本信息部分。
    • Description:描述该 unit 的用途。
  • [Timer]:Timer unit 的定时器配置部分。
    • OnCalendar:指定定时任务执行的时间表,这里设置为每天执行一次。
    • Persistent:指定即使任务被错过也会保留下次执行的信息。
  • [Install]:指定该 unit 的安装信息。
    • WantedBy:指定该 unit 所属的 target,这里设置为 timers.target。

1.3 Service

Service: 在 systemd 中,service 是一种 unit 类型,用于表示系统中运行的一个服务或进程。每个 service unit 对应一个特定的服务,可以控制该服务的启动、停止、重启等操作。Service unit 文件通常以 .service 为扩展名,定义了服务的启动方式、依赖关系、环境变量等信息。

[Unit]
Description=Backup Service
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash /path/to/backup_script.sh

[Install]
WantedBy=multi-user.target
  • [Unit]:Unit 的基本信息部分。
    • Description:描述该 unit 的用途。
    • After:指定该 unit 依赖的其他 unit,在这里表示依赖于网络服务启动完成后再启动。
  • [Service]:Service unit 的服务配置部分。
    • Type:指定服务的类型,这里设置为 one-shot,表示运行一次即退出。
    • ExecStart:指定服务启动时执行的命令。
  • [Install]:指定该 unit 的安装信息。
    • WantedBy:指定该 unit 所属的 target,这里设置为 multi-user.target。

1.4 Target

Target 是一种特殊的 unit,用于组织和管理其他 unit。类似于传统 Linux 系统中的运行级别(runlevel)的概念,不同的 target 可以定义不同的系统状态,如 multi-user.target 表示多用户模式,graphical.target 表示图形界面模式。

[Unit]
Description=Custom Target

[Install]
Alias=custom.target
  • [Unit]:Unit 的基本信息部分。
    • Description:描述该 unit 的用途。
  • [Install]:指定该 unit 的安装信息。
    • Alias:设置别名,这里设置为 custom.target。

2、常用命令

2.1 systemctl start <service>

启动指定的系统服务。例如,启动 Apache 服务:

systemctl start apache2

2.2 systemctl stop <service>

停止指定的系统服务。例如,停止 MySQL 服务:

systemctl stop mysql

2.3 systemctl restart <service>

重启指定的系统服务。例如,重启 Nginx 服务:

systemctl restart nginx

2.4  systemctl status <service>

查看指定系统服务的状态。例如,查看 SSH 服务状态:

systemctl status ssh

  • Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled):这部分显示了服务的加载状态和相关信息。

    • Loaded:表示服务是否已加载。
    • /lib/systemd/system/ssh.service:指示服务单元文件的路径。
    • enabled:表示服务已启用,会在系统启动时自动启动。
    • vendor preset: enabled:表示该设置是由系统供应商预设的。
  • Active: active (running) since Fri 2024-03-22 08:29:44 CST; 1h 12min ago:这部分显示了服务的当前状态。

    • Active:表示服务的活动状态。
    • active (running):表示服务正在运行。
    • since Fri 2024-03-22 08:29:44 CST:表示服务启动的时间。
    • 1h 12min ago:表示服务已经运行了 1 小时 12 分钟。
  • Process: 1240 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS):这部分显示了服务启动前的执行过程。

    • Process: 1240:进程的 ID。
    • ExecStartPre=/usr/sbin/sshd -t:在启动服务之前执行的命令。
    • code=exited, status=0/SUCCESS:表示命令执行成功。
  • Main PID: 1251 (sshd):这部分显示了服务的主进程 ID 和进程名称。

  • Tasks: 1 (limit: 4628):这部分显示了与服务关联的任务数量以及任务限制。

  • CGroup: /system.slice/ssh.service:这部分显示了服务所属的控制组。

  • └─1251 /usr/sbin/sshd -D:这部分显示了服务的主进程及其执行的命令。

2.5 systemctl enable <service>

设置系统服务开机自启动。例如,设置 MariaDB 服务开机自启动:

systemctl enable mariadb

2.6 systemctl disable <service>

取消系统服务开机自启动。例如,取消开机自启动 Postfix 服务:

systemctl disable postfix

2.7 systemctl list-units

列出当前加载的所有单元(包括服务、挂载点、设备等)。例如,列出所有加载的单元:

systemctl list-units

2.8 systemctl daemon-reload

重新加载 systemd 系统配置,使最新的配置生效。通常在修改 systemd 配置后需要运行此命令。

3、测试

3.1 uint格式

名称字段解释示例
UnitDescription描述该 unit 的用途。"Starts the web server"
Documentation指定相关文档的路径。/usr/share/doc/myunit/readme
Requires指定该 unit 依赖的其他 unit(强依赖,依赖启动失败则本身也失败)network.target, mysql.service
Wants指定该 unit 期望依赖的其他 unit(弱依赖)syslog.service, custom.target
Before指定该 unit 应该在哪些 unit 之前启动。network.target, graphical.target
After指定该 unit 应该在哪些 unit 之后启动。multi-user.target, sshd.service
Conflicts指定该 unit 与哪些 unit 冲突。apache.service, nginx.service
OnFailure指定在该 unit 失败时应该启动的其他 unit。rescue.service, alert.target
OnFailureJobMode指定在该 unit 失败时应该采取的操作模式。replace(如果该 unit 失败,将替换为指定的 unit), fail(如果该 unit 失败,将停止所有依赖于它的 unit), isolate(如果该 unit 失败,将进入隔离模式,不再启动其他 unit)
IgnoreOnIsolate指定在隔离模式下是否忽略该 unit。yes, no
ServiceType指定服务的类型,如 simple、forking、oneshot、dbus、notify、idle 等。simple(服务主进程启动后将一直保持运行), forking(服务主进程启动后会创建子进程并立即退出), oneshot(服务用于执行一次性任务,任务完成后服务将自行退出)
ExecStart指定服务启动时执行的命令。/usr/bin/myapp --start
ExecStartPre指定在服务启动前执行的命令。/usr/bin/prestart.sh
ExecStartPost指定在服务启动后执行的命令。/usr/bin/poststart.sh
ExecReload指定重新加载服务时执行的命令。/usr/bin/myapp --reload
ExecStop指定停止服务时执行的命令。/usr/bin/myapp --stop
ExecStopPost指定在服务停止后执行的命令。/usr/bin/poststop.sh
Restart指定服务在失败时是否重启。always, on-success, on-abnormal
RestartSec指定服务重启的时间间隔。30s
TimeoutStartSec指定服务启动的超时时间。5min
TimeoutStopSec指定服务停止的超时时间。1h

Install
 

Alias设置别名,用于创建链接。myservice.service
WantedBy指定该 unit 所属的 target。multi-user.target
RequiredBy指定该 unit 所需的 target。graphical.target

3.2 测试

编写一个service,设置开机自启动,服务执行一个脚本starttime.sh,脚本将当前时间输出到/home/starttime.txt,starttime.sh脚本内容如下:

#!/bin/bash
date +'%Y-%m-%d %H:%M:%S' > /home/starttime.txt

编写服务starttime.service:

[Unit]
Description=Record Start Time to File

[Service]
Type=oneshot
ExecStart=/home/starttime.sh

[Install]
WantedBy=multi-user.target

将服务放到/etc/systemd/system/目录下,将脚本放到/home目录下,修改脚本权限为777,设置开机自启动后重启终端:

查看结果:

4、总结

本文介绍了systemd一些常见的名词概念,介绍了常用的命令和unit的一般格式,最后编写服务进行测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/481740.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

区块链技术下的新篇章:DAPP与消费增值的深度融合

随着区块链技术的持续演进&#xff0c;去中心化应用&#xff08;DAPP&#xff09;正逐渐受到人们的瞩目。DAPP&#xff0c;这种在分布式网络上运行的应用&#xff0c;以其去中心化、安全可靠、透明公开的特性&#xff0c;为用户提供了更为便捷和安全的消费体验。近年来&#xf…

苏州城市学院芮国强一行莅临聚合数据走访调研

3月19日&#xff0c;苏州城市学院校党委书记芮国强、校长赵志宏一行莅临聚合数据&#xff0c;就数据科技赋能行业升级展开调研。聚合数据董事长左磊接待来访。 城市学院党委理论学习中心组一行参观了聚合数据展厅&#xff0c;了解了聚合数据的发展历程、数据产品、应用案例、奖…

能强优品木业:打造高品质混凝土支撑模板,铸就建筑精品

在现代建筑施工中,高质量的混凝土支撑模板是确保工程质量和施工安全的关键所在。贵港市能强优品木业有限公司作为一家专业建筑模板生产厂家,凭借25年的丰富经验和先进的生产工艺,为建筑行业提供了多层板芯、高强度承重、防潮不变形、施工安全抗弯曲性强的优质混凝土支撑模板。 …

day16-环形链表

问题描述&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0…

linux下的打包/解包命令(tar,zip/unzip)

目录 打包/解包 作用 zip -r选项 unzip -d选项 如果不使用递归压缩 -l / -v选项 tar 介绍 选项 示例 打包/解包 作用 使多个文件变成一个文件,不易造成数据缺失使下载时间变短 zip 将目录或文件压缩成zip格式 -r选项 递归式压缩某目录及其所有子目录中的文件 如果不…

【大数据】五、yarn基础

Yarn Yarn 是用来做分布式系统中的资源协调技术 MapReduce 1.x 对于 MapReduce 1.x 的版本上&#xff1a; 由 Client 发起计算请求&#xff0c;Job Tracker 接收请求之后分发给各个TaskTrack进行执行 在这个阶段&#xff0c;资源的管理与请求的计算是集成在 mapreduce 上的…

大模型+强化学习_在线交互调参_GLAM

英文名称: Grounding Large Language Models in Interactive Environments with Online Reinforcement Learning 中文名称: 通过在线强化学习在交互式环境中建立大型语言模型 链接: https://arxiv.org/pdf/2302.02662.pdf 代码: https://github.com/flowersteam/Grounding_LLMs…

Listary 清除无效的搜索历史记录

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 listary 用过一段时间后&#xff0c;搜索其他东西总会显示一个感叹号的之前的文件&#xff0c;强迫症很难受啊。 二、原因分析 猜测是历史记录的问题记录历史搜索的文件没有重建 三、解决方案 提示…

Centos7 搭建openVPN

一、概述 CentOS 搭建openVPN时需要一台有公网IP的服务器。openVPN 是一个基于SSL/TLS的虚拟专用网络&#xff08;VPN&#xff09;&#xff0c;它允许你创建一个安全的连接&#xff0c;通过它你可以将你的网络流量封装并加密&#xff0c;从而在公网上进行传输。 一、搭建证书…

现代白色系装修,打造高级感生活空间。福州中宅装饰,福州装修

玄关 玄关嵌入满墙收纳鞋柜&#xff0c;下方留空15公分作为拖鞋区&#xff0c;中间留出40公分作为随手区 客厅 客厅打通阳台&#xff0c;白色亮面瓷砖通铺&#xff0c;即使不做落地窗设计&#xff0c;室内也是十分明亮 落地电视柜&#xff0c;减少卫生死角&#xff0c;白色整体…

vulnhub prime1通关

目录 环境安装 1.信息收集 收集IP 端口扫描 目录扫描 目录文件扫描 查找参数 打Boss 远程文件读取 木马文件写入 权限提升 方法一 解锁密钥 方法二&#xff1a; linux内核漏洞提权 总结 环境安装 Kali2021.4及其prime靶机 靶机安装&#xff1a;Prime: 1 ~ Vul…

Install Docker

Docker Desktop 直接安装 Docker Desktop Docker Desktop includes the Docker daemon (dockerd), the Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper. Linux下安装Docker CE 参考官方文档 参见阿里云的文档 # step 1…

docker安装WireGuard服务

启动 WireGuard 如下异常 则是linux内核需要升级 $ wg-quick down wg0 $ wg-quick up wg0 Error: WireGuard exited with the error: Cannot find device "wg0" This usually means that your hosts kernel does not support WireGuard!at /app/lib/WireGuard.js:65…

效率加倍 :5 个有助于自动化办公的 Python 工具库

想想你在工作中所做的所有重复性任务。发送电子邮件、创建 Excel 报告、从 PDF 中提取数据、手动进行大量的数据分析工作。 我相信没有人愿意天天重复这样做&#xff0c;但最终&#xff0c;必须有人这样做。有没有更好的解决方案呢&#xff1f; 在本文中&#xff0c;我将向大…

【STL学习】(1)string类

前言 本文将详细讲解STL中string类的常用的接口函数。 一、为什么学习string类&#xff1f; 1、字符串类型的重要性 在现实生活中有很多复杂类型是以字符串来表达的&#xff0c;比如我们在搜索引擎输入的“数据”&#xff0c;一个人的姓名、身份证号等等。 所以字符串类型是很…

康奋威科技邀您到场参观2024长三角快递物流展

参展企业介绍 杭州康奋威科技股份有限公司创立于2005年&#xff0c;由国家“万人计划”专家任天挺先生创立并担任法人&#xff0c;是一家专业从事智能装备研发与制造的国家级高新技术企业。专注于自动化控制、机械设计、信息化方面的技术研究&#xff0c;主要为太阳能光伏、智…

一篇文章让你完全掌握使用Git推送代码到新版GitCode

Git推送代码到新版GitCode 前言一、安装git二、tortoise git的安装2.1 关于tortoise git2.2 tortoise git和tortoise git汉语包的下载2.3安装过程2.4配置tortoise git 三、创建GitCode项目关于READM文件关于.gitignore文件关于LICENS文件 四、配置GitCode和Git4.1克隆项目4.2配…

【十二】【算法分析与设计】滑动窗口(3)

30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff…

【Godot 3.5控件】用TextureProgress制作血条

说明 本文写自2022年11月13日-14日&#xff0c;内容基于Godot3.5。后续可能会进行向4.2版本的转化。 概述 之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat&#xff0c;好处是它几乎可以算是矢量的&#xff0c;体积小&#xff0c;所有东西都是样式信息&am…

Mysql学习--深入探究索引和事务的重点要点与考点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …