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的一般格式,最后编写服务进行测试。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm校园美食交流系统论文

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10…

字符函数与字符串函数

目录 一.字符分类函数 二.字符转化函数 三.strlen函数 函数的介绍 strlen函数的模拟实现 1.计算器法 2.递归 三.指针-指针的方式 四.strcpy函数 函数介绍 strcmp的模拟实现 五.strcat函数 函数介绍 strcat的模拟实现 六.strcmp函数 函数介绍 返回值 strcm…

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

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

自动驾驶---Motion Planning之轨迹Path优化

1 背景 在之前的几篇文章中,不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》,ST图《自动驾驶---Motion Planning之Speed Boundary》,又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》,最终我们都是为了得到boundary的信息。 …

OpenCV实战:智能人脸识别打卡系统

1、介绍 目前&#xff0c;很多公司对员工的考勤同时通过打卡机或者钉钉之类的打卡软件&#xff0c;传统的员工打卡方式有很多&#xff0c;例如点名、签字、刷卡、指纹等等 然而随机机器视觉、计算机视觉的不断发展&#xff0c;算力的不断提升&#xff0c;人工智能对人脸检测的…

如何用联合(共用体)union验证系统大小端

一&#xff1a;思路 由联合体的特点&#xff0c;可知上图&#xff0c;char c 和 int i 共用四个字节&#xff0c;假设是小端&#xff0c;则由左到右是低地址到高地址&#xff0c;四个字节的内容如图所示01 00 00 00 代码展示&#xff1a; 如果第一个字节是1&#xff0c;则证明…

<Linux> 线程池

目录 前言&#xff1a; 一、线程池概念 &#xff08;一&#xff09;池化技术 &#xff08;二&#xff09;优点 &#xff08;三&#xff09;应用场景 二、线程池的实现 &#xff08;一&#xff09;线程池_V1&#xff08;朴素版&#xff09; &#xff08;二&#xff09;线…

Nginx发布之后可以使用IP访问,不能使用localhost访问, Nginx发布之后可以使用localhost访问,不能使用IP访问,

如标题所说 Nginx发布之后可以使用IP访问&#xff0c;不能使用localhost访问&#xff0c; Nginx发布之后可以使用localhost访问&#xff0c;不能使用IP访问&#xff0c; 修改配置文件也没有用 清除浏览器缓存数据

配置DHCPV6

组网需求 如果大量的企业用户IPv6地址都是手动配置&#xff0c;那么网络管理员工作量大&#xff0c;而且可管理性很差。管理员希望实现公司用户IPv6地址和网络配置参数的自动获取&#xff0c;便于统一管理&#xff0c;实现IPv6的层次布局。 图1 DHCPv6服务器组网图 配置思路 …

自动化改变金融科技文档生命周期

金融科技公司可能处于软件开发的最前沿&#xff0c;但即使是最先进的系统也必须能够支持金融服务领域采用的一系列文档密集型程序。因此&#xff0c;绝大多数金融科技企业都使用数字文档管理解决方案&#xff0c;无论是内部构建的还是由第三方供应商开发的。金融科技公司可以通…

UI自动化测试面试题小结

列举web自动化中常见的元素定位方式&#xff1f; id&#xff1a;根据id来获取元素&#xff0c;返回单个元素&#xff0c;id值一般是唯一的&#xff1b; name&#xff1a;根据元素的name属性定位&#xff1b; tagName&#xff1a;根据元素的标签名定位&#xff1b; className…

深入理解XML技术(看这一篇就够了)

目录&#xff1a; XMLXML的功能XML基本语法XML组成部分约束DTD约束Schema约束 Jsoup解析器DOMSAXXML常见解析器DOM4JJsoupXPath解析 XML 概念 XML&#xff08;Extensible Markup Language&#xff09;&#xff1a;可扩展标记语言 可扩展&#xff1a;标签都是自定义的。 发展历…

[ C++ ] STL---仿函数与priority_queue

目录 仿函数 示例一&#xff1a; 示例二 : 常见的仿函数 priority_queue简介 priority_queue的常用接口 priority_queue的模拟实现 基础接口 push() 堆的向上调整算法 堆的插入 pop() 堆的向下调整算法 堆的删除 priority_queue最终实现 仿函数 仿函数&#xff…

MusicHiFi: Fast High-Fidelity Stereo Vocoding

MusicHiFi: Fast High-Fidelity Stereo Vocoding 相关链接&#xff1a;arxiv github 关键字&#xff1a;音乐生成、高保真立体声、立体声编解码器、生成对抗网络、频带扩展 摘要 MusicHiFi是一种高效的高保真立体声编解码器&#xff0c;它通过将低分辨率的mel频谱图转换为音频…

【Vue】Vue集成Element-UI框架

&#x1f64b;‍ 一日之际在于晨 ⭐本期内容&#xff1a;Vue集成Element-UI框架 &#x1f3c6;系列专栏&#xff1a;从0开始的Vue之旅 文章目录 Element-UI简介安装Element-UInpm安装CDN安装 引入Element-UI测试是否引入成功总结 Element-UI简介 Element-UI官网&#xff1a;点…

极大提高工作效率的 Linux 命令

作为一名软件开发人员&#xff0c;掌握 Linux 命令是必不可少的技能。即使你使用 Windows 或 macOS&#xff0c;你总会遇到需要使用 Linux 命令的场合。例如&#xff0c;大多数 Docker 镜像都基于 Linux 系统。要进行 DevOps 工作&#xff0c;你需要熟悉Linux&#xff0c;至少要…

vue-quill-editor和vue-ueditor-wrap富文本编辑器应用

目录 一、vue-quill-editor 1.1、界面展示 1.2、代码介绍 1.2.1、安装 1.2.2、配置 1.2.3、代码应用 1.2.4、提取内容 二、vue-ueditor-wrap 2.1、界面展示 2.2、代码介绍 2.2.1、安装 2.2.2、配置 2.2.3、代码应用 一、vue-quill-editor 1.1、界面展示 文本输出…

Vue响应式原理全解析

前言 大家好&#xff0c;我是程序员蒿里行。浅浅记录一下面试中的高频问题&#xff0c;请你谈一下Vue响应式原理。 必备前置知识&#xff0c;​​Vue2​​官方文档中​​深入响应式原理​​​及​​Vue3​​官方文档中​​深入响应式系统​​。 什么是响应式 响应式本质是当…

liunx CentOS7 搭建lnmp环境 php nginx mysql

安装一些刚需软件&#xff1a;不懂请自行查询 安装一些需要的软件命令 yum install wget vim net-tools bash* lrzsz tree nmapnc lsof telnet -y 刷新命令 source /usr/share/bash-completion/bash_completion echo source /usr/share/bash-completion/bash_completion &…

UE5 C++ 3D血条 响应人物受伤 案例

一.3Dwidget 1.创建C Userwidget的 MyHealthWidget&#xff0c;声明当前血量和最大血量 UCLASS() class PRACTICEC_API UMyHealthWidget : public UUserWidget {GENERATED_BODY() public:UPROPERTY(EditAnywhere,BlueprintReadWrite,Category "MyWidget")float C…