Systemd 简介

article/2025/9/15 7:13:09

一  概述

    Linux 服务管理有两种方式service和systemctl。而systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动,systemd对应的进程管理命令就是systemctl。值得一提的是,systemctl命令兼容了service哦。

systemd启动服务管理机制的好处: 

  • 平行处理所有服务,加速开机流程:旧的init启动脚本(System V的那个)是“一项一项任务依序启动”的模式,因此不相依的服务也是得要一个一个的等待。而systemd可以让所有的服务同时启动,毕竟目前硬件主机系统与操作系统几乎都支持多核心架构,系统启动的速度变快了;
  • 一经请求就响应的on-demand启动方式:systemd仅有一只systemd服务搭配systemctl指令进行处理,无须其他额外的指令来支持。不像systemV还要init,chkconfig,service...等等指令。此外,systemd由于常驻内存,因此任何请求(on-demand)都可以立即处理后续的daemon启动的任务;
  • 服务关联性的自我检查:由于systemd可以自行进行服务关联性的检查,因此如果B服务的启动前提是A服务,那当在没有启动A服务的情况下仅手动启动B服务时,systemd会自动启动A服务;
  • 根据daemon功能分类:systemd旗下管理的服务非常多,为了理清所有服务的功能,因此,首先systemd先定义所有的服务为一个服务单位(这里单位叫“unit”),并将该unit分类到不同的服务类型(type)中。systemd将服务单位(unit)区分为service,socket,target,path,snapshot,timer等多种不同的类型(type);
  • 将多个daemons集合成为一个群组:systemd将许多的功能集合成为一个所谓的target项目,这个项目主要用于设计操作环境的创建,所以集合了许多的daemons(执行某个target就是执行多个daemon);
  • 向下相容旧有的init服务脚本:基本上,systemd是可以兼容init的启动脚本,因此,旧的init启动脚本也能够通过systemd来管理,当然了,这里仅限于不使用systemd的某些高级功能;

二  systemd的配置文件目录

  • /usr/lib/systemd/system/:每个服务最主要的启动脚本的配置放在这,有点类似以前的/etc/init.d;
  • /run/systemd/system/:系统执行过程中所产生的服务脚本所在目录,这些脚本的优先级要比/usr/lib/systemd/system/高;
  • /etc/systemd/system/:管理员根据主机系统的需求所创建的执行脚本所在目录,执行优先级比/run/systemd/system/高;

从上面的功能及优先级次序,我们可以知道,/etc/systemd/system/目录下的相关配置,决定系统了会不会执行某些服务,所以该目录下面一般放着一大堆链接文件。而/usr/lib/systemd/system/下,则放着实际执行的systemd启动脚本配置文件。因此如果想要修改某个服务启动的设置,应该去/usr/lib/systemd/system/下面修改。

三  主要服务功能类型

  • .service:一般服务类型(service unit):主要是系统服务,包括服务器本身所需要的本机服务以及网络服务,比较经常被使用到的服务大多是这种类型,所以,这也是最常见的类型。
  • .socket:内部程序数据交换的插槽服务(socketunit):主要是IPC(Inter-processcommunication)的传输信息插槽(socketfile)功能。这种类型的服务通常在监控信息传递的插槽档,当有通过此插槽传递信息请求链接服务的时候,就依据当时的状态将该用户的请求传送到对应的daemon,若daemon尚未启动,则启动该daemon后再传送用户的请求。使用socket类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟启动的时间。一般用于本机服务比较多,例如,图形界面很多的软件都是通过socket来进行本机程序数据交换的行为。
  • .target:执行环境类型(target unit):其实是一群unit的集合,例如multi-user.target其实就是一堆服务的集合。
  • .mount:文件系统挂载相关的服务(automount unit/mount unit):例如来自网络的自动挂载、NFS文件系统挂载等与文件系统相关性较高的程序管理。
  • .path:监测特定文件或目录类型(path unit):某些服务需要监测某些特定的目录来提供序列服务,例如最常见的打印服务,就是通过监测打印序列目录来启动打印功能。这时就得要.path的服务类型支持。
  • .timer:循环执行的服务(timer unit):这个东西有点类似anacrontab,不过是由systemd主动提供的,比anacrontab更加有弹性。

三  服务状态

[root@t50 ~]# systemctl status firewalld

常见的服务状态如下: 

  • active(running):正有一只或多只程序正在系统中执行的意思;
  • active(exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行;
  • active(waiting):正在执行当中,不过还需要等待其他的事件才能继续处理;
  • inactive:这个服务目前没有运行;
  • dead:程序已经清除;

用红线划的地方是服务程序的启动状态: 

  • enabled:这个daemon将在开机时被执行;
  • disabled:这个daemon在开机时不会被执行;
  • static:这个daemon不可以自己启动(enable不可),不过可能会被其他的enabled 的服务来唤醒(关联属性的服务);
  • mask:这个daemon无论如何都无法被启动,因为已经被强制注销(非删除),可通过systemctlunmask方式改回原本状态;

四 常用命令

# 开机启动,并立即启动
systemctl enable --now mysqld# 关闭开机启动
systemctl disable mysqld# 启动服务
systemctl start mysqld# 停止服务
systemctl stop mysqld# 重启服务
systemctl restart mysqld# 查看服务状态
systemctl status mysqld
systemctl is-active sshd.service# 结束服务进程(服务无法停止时)
systemctl kill mysqld#范列出系统上面有启动的unit
systemctl #列出所有已经安装的unit有哪些
systemctl list-unit-files #列出类型为service的所有项目,不论启动与否
systemctl list-units --type=service --all #输入目前机器默认的模式,如图形界面模式或者文本模式 
systemctl get-default  #将目前的操作环境改为纯文本模式,关掉图形界面
systemctl isolate multi-user.target  #将目前的操作环境改为图形界面
systemctl isolate graphical.target  #系统关机
systemctl poweroff  #重新开机
systemctl reboot   #进入暂停模式
systemctl suspend   #强制进入救援模式
systemctl rescue   #进入休眠模式
systemctl hibernate   #强制进入紧急救援模式
systemctl emergency   #查询当前默认的target关联了啥
systemctl list-dependencies --reverse   #查询图形界面模式的target关联了啥
systemctl list-dependencies graphical.target  #查看当前的socket服务 
systemctl list-sockets   #查看 unit 的详细配置情况
systemctl show etcd.service   #禁用某个服务 
systemctl mask etcd.service   #解除禁用某个服务 
systemctl unmask etcd.service   

五 服务启动的配置文件

配置文件主要放在 /usr/lib/systemd/system 目录,也可能在 /etc/systemd/system 目录

# 查看 sshd 服务启动文件
systemctl cat sshd.service# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target

每个服务文件以 .service 结尾,一般会分为 3 部分,必须包含 [Service] 部分

[Unit] 启动顺序与依赖关系

Description:当前服务的简单描述
Documentation:指定 man 文档位置After:如果 network.target 或 sshd-keygen.service 需要启动,那么 sshd.service 应该在它们之后启动
Before:定义 sshd 应该在哪些服务之前启动
注意:After 和 Before 字段只涉及启动顺序,不涉及依赖关系。Wants:表示 sshd.service 与 sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service 继续执行
Requires:表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service 也必须退出
注意:Wants 字段与 Requires 字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动。

[Service] 启动行为

EnvironmentFile:许多软件都有自己的环境参数文件,该字段指定文件路径
注意:/etc/profile 或者 /etc/profile.d/ 这些文件中配置的环境变量仅对通过 pam 登录的用户生效,而 systemd 是不读这些配置的。
systemd 是所有进程的父进程或祖先进程,它的环境变量会被所有的子进程所继承,如果需要给 systemd 配置默认参数可以在 /etc/systemd/system.conf  和 /etc/systemd/user.conf 中设置。
加载优先级 system.conf 最低,可能会被其他的覆盖。Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle
simple(设置了 ExecStart= 但未设置 BusName= 时的默认值):ExecStart 字段启动的进程为该服务的主进程
forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程ExecStart:定义启动进程时执行的命令
上面的例子中,启动 sshd 执行的命令是 /usr/sbin/sshd -D $OPTIONS,其中的变量 $OPTIONS 就来自 EnvironmentFile 字段指定的环境参数文件。类似的,还有如下字段:
ExecReload:重启服务时执行的命令
ExecStop:停止服务时执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
process:只杀主进程
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:没有进程会被杀掉,只是执行服务的 stop 命令Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下:
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启RestartSec:表示 Systemd 重启服务之前,需要等待的秒数

配置中多个相同配置会选择最后一个,下面结果是 execstart2

[Service]ExecStart=/bin/echo execstart1ExecStart=/bin/echo execstart2

所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行

EnvironmentFile=-/etc/sysconfig/sshd,表示即使 /etc/sysconfig/sshd 文件不存在,也不会抛出错误

[Install]

WantedBy:表示该服务所在的 Target(服务组)

关于 Target,运行级别

# 查看默认 Target
systemctl get-default
# 结果为 multi-user.target,表示默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么 systemctl enable 命令能设置开机启动的原因# 查看 multi-user.target 包含的所有服务
systemctl list-dependencies multi-user.target# 切换到另一个 target
# shutdown.target 就是关机状态
# 常用的 Target 有两个:一个是 multi-user.target,表示多用户命令行状态;另一个是 graphical.target,表示图形用户状态,它依赖于 multi-user.target
systemctl isolate shutdown.target

六 自定义服务

在 /usr/lib/systemd/system 下新建服务脚本

vim /usr/lib/systemd/system/zdy.service[Unit]
Description=描述
Environment=环境变量或参数(系统环境变量此时无法使用)
After=network.target[Service]
Type=forking
EnvironmentFile=所需环境变量文件或参数文件
ExecStart=启动命令(需指定全路径)
ExecStop=停止命令(需指定全路径)
User=以什么用户执行命令[Install]
WantedBy=multi-user.target

新建完成后设置自启动

# 添加或修改配置文件后,需要重新加载
systemctl daemon-reload# 设置自启动,实质就是在 /etc/systemd/system/multi-user.target.wants/ 添加服务文件的链接
systemctl enable zdy

官方手册 systemd.service

中文翻译 http://www.jinbuguo.com/systemd/systemd.service.html

Systemd 入门教程:实战篇 - 阮一峰的网络日志

最简明扼要的 Systemd 教程,只需十分钟_一行代码的自述的博客-CSDN博客_systemd

详细讲解systemctl(附常用指令)_BoCong-Deng的博客-CSDN博客

Systemd/zh-cn - Fedora Project Wiki


http://chatgpt.dhexx.cn/article/ZbxWcPo2.shtml

相关文章

systemd简介

Systemd 是一个专用于 Linux 操作系统的系统与服务管理器,其目的是要取代Unix时代以来一直在使用的init系统。 systemd概述Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。 systemd框架图 根据 Linux 惯…

Systemd 入门及常用命令

目录 Systemdsystemd架构systemd 系统管理管理系统查看启动耗时查看当前主机的信息 Unit 资源查看当前系统的所有 Unit查看系统状态和单个 Unit 的状态 Unit 管理依赖关系Unit 配置文件查看配置文件的内容 Targettarget(Systemd) 与 runlevel&#xff08…

systemd 介绍

转自:https://www.linuxidc.com/Linux/2018-03/151291.htm 从 init 系统说起 Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 PID 为 1 的 …

[2020.1.10]systemd介绍

1 systemd基本概念 systemd:a system daemon,相当于以前的init进程,pid1,systemd是1号进程!!! sbin/init --> /lib/systemd/systemd unit: 一个进程,例如lightdm.service job: 一个动作,启动是个job,关闭是个job。开机启动时,systemd…

systemd教程(三)

下来会通过示例来描述不同Service Type值的应用场景。在此之前,强烈建议先阅读前后台进程父子关系和daemon类进程来搞懂进程之间的关系和Daemon类进程的特性。 systemd service:Typeforking 当使用systemd去管理一个长久运行的服务进程时,最…

dpkg打包笔记

dpkg 安装软件 dpkg -i xxx.deb 查看安装目录 dpkg -L xxx 显示版本 dpkg -l xxx 详细信息 dpkg -s xxx 罗列内容 dpkg -c xxxx 卸载软件 dpkg -r xxxx 构建deb包 dpkg -p

dpkg和apt

文章目录 Ubuntu软件安装Deb包安装Deb包简介dpkg常用命令 apt-get源安装apt-get简介apt工作原理apt相关文件常用的apt命令参数apt-getapt-cache dpkg和apt-get的区别 Ubuntu软件安装 Linux有很多种发行版本,各种发行版本之间安装软件方式和命令不一样,同…

dpkg安装

目录 转载:https://blog.csdn.net/u012300744/article/details/80267225 1.安装 (3)安装 sudo dpkg -i deb文件名 (4)根据经验,通常情况下会报依赖关系的错误,我们可以使用以下的命令修复安…

dpkg制作deb包详解

1 deb包文件结构 deb 软件包里面的结构,它具有DEBIAN和软件具体安装目录(如etc, usr, opt, tmp等)。在DEBIAN目录中至少必须包括control文件,还有可能postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、…

dpkg命令的用法

dpkg命令的用法 dpkg 是Debian package的简写,为”Debian“ 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除。 所有源自"Debian"的Linux的发行版都使用 dpkg, 例如"Ubuntu" 阅读目录 安装软件列出与该…

dpkg说明

dpkg与centos中的rpm相似,被用于安装,卸载及查询deb包信息。下面简单介绍基础命令。 已有安装包:test.deb。 安装命令: dpkg -i test.deb 安装test.deb软件包 dpkg -c test.deb #查看test.deb软件包中包含的文件结构 安装后查询命令&#xff…

大数据生态和Spark简介

一、大数据时代 1.第三次信息化浪潮:根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一次重大变革。 2.数据产生方式的变革促成大数据时代的来临: ①存储设备容量不断增加 ②CPU处理能力大幅提升 ③网络带宽不断增加 等等&#…

Spark大数据计算引擎介绍

本文内容参考《Spark与Hadoop大数据分析》[美]文卡特安卡姆 著;《大数据架构详解 从数据获取到深度学习》 朱洁 罗华霖 著。 大数据生态的两个主要部分是Hadoop软件框架和Spark内存级计算引擎。Hadoop包含四个项目:Hadoop common,HDFS&#…

大数据之spark_spark简介

什么是Spark Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache的顶级项目,2014年5月发布spark1.0,201…

开源项目_springboot的答题系统+spark大数据实时分析

一、项目展示 在这里,主要展示大数据图表分析的几个页面。更多精彩由您自己发掘! 图1 饼状图 图2 堆叠图 图3 柱状图 二、项目介绍 本项目分为两个模块,第一个为java语言基于springboot实现的答题模块,另一个为scala语言基于spar…

Spark大数据开发技术简介

Spark大数据开发技术简介 轻量级的内存集群计算平台 文章目录 Spark大数据开发技术简介历史沿革Spark的优点对比Apache Spark堆栈中的不同组件基本原理架构组成部署和体系结构Spark运行模式 页面 历史沿革 Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架最…

【大数据】【Spark】Spark概述

由于Spark程序的编写最好使用Scala语言,可参照博主以下Scala入门文章 链接:https://blog.csdn.net/treesorshining/article/details/124697102 文章目录 1.Spark概念2.Spark与Hadoop的关系1.从时间节点上来看2.从功能上来看 3.Spark与Hadoop的比较4.Spar…

Spark大数据系列教程持续更新

Spark大数据系列教程 想学习大数据的福利来了,由于近期工作繁忙,本人已将自己学习大数据的过程陆续开始更新: Spark大数据系列:一、RDD详解Spark大数据系列 二、Spark入门程序WordCount详解(Scala版本)Spark大数据系列&#xff…

大数据面试题——spark

文章目录 讲一下spark 的运行架构一个spark程序的执行流程讲一下宽依赖和窄依赖spark的stage是如何划分的Spark的 RDD容错机制。checkpoint 检查点机制?RDD、DAG、 Stage、 Task 、 Job Spark的shuffle介绍Spark为什么快,Spark SQL 一定比 Hive 快吗Spar…

引爆Spark大数据引擎的七大工具

原文名称:7 tools to fire up Sparks big data engine Spark正在数据处理领域卷起一场风暴。让我们通过本篇文章,看看为Spark的大数据平台起到推波助澜的几个重要工具。 Spark生态系统众生相 Apache Spark不仅仅让大数据处理起来更快,还让大…