在Linux上,系统ctl状态输出显示服务是通过一个称为服务文件的文件加载的。可以在/lib/systemd/system或/etc/systemd/system目录中访问这些文件。
服务文件具有.service扩展名,并包含system d管理服务所需的指令。
System d init系统使用该单元管理系统初始化。单元是执行任务或操作的对象,例如管理服务,这涉及控制和监视它。这些单元本质上是称为服务文件的文件,包括单元依赖项和命令。这些文件对于有效控制后台进程和管理资源至关重要。
在本指南中,我将探讨systemd服务文件、它的结构以及控制服务的主要指令。
在使用SYSTEM D时,术语SYSTEM D服务文件和SYSTEM D单元文件通常可以互换使用,因为从技术上讲,它们指的是同一事物。
什么是Systemd服务文件
在Linux上,systemd使用包含配置指令的服务文件来管理服务,以便systemd能够理解和执行。
要列出单位,请使用systemctl和—list—units命令。
System ctl--列表-单位
要读取任何服务的服务文件,请使用cat命令与文件路径。
cat [/service—file—path]
例如,要查看ssh. service的服务文件,请使用给定的命令。
cat/lib/systemd/system/ssh. service
系统服务文件剖析
一般而言,系统服务单元文件包含三个部分。
- 单元
- 服务
- 安装
特定于服务的单元文件将有一个称为服务部分的特定部分。
请注意,该服务只是一种类型的单元。一个单元可以有不同的类型,如套接字、设备、挂载、自动挂载、交换、目标、计时器、切片和作用域。这些部分被放置在机组和安装部分之间。文件扩展名也将被相应的设备类型替换,例如,套接字设备类型将具有.套接字文件扩展名。
注意:在本指南中,我将重点介绍服务单元类型,因为它被管理员和开发人员广泛使用。
这些章节放在方括号内([])。每个部分都包含一个相关的指令集。下面给出了服务文件的一般结构。
【单位】
指令1=指令1
指令2 =指令2
[服务]
指令1=指令1
指令2 =指令2
[安装]
指令1=指令1
指令2 =指令2
各节的顺序可以更改;但一般都遵循上述顺序。
[单位]科
单元部分包含单元和单元依赖性的描述。按照惯例,这一部分放在服务文件的顶部。常用指令如下:
指令 | 描述 |
描述 | 此指令用于提及服务的名称。说明长度不得超过80个字符。 |
文档 | 此指令包含服务的手册页或URL。 |
需要 | 此指令用于提到对当前服务的依赖。如果不执行此依赖关系服务的激活,则不会启动当前服务。 |
想 | 此指令用于提及对当前服务的依赖性。但是,不需要激活此依赖项服务即可运行当前服务。 |
之前 | 当前设备激活后,将启动本指令中提到的服务。 |
后 | 在启动当前设备之前,将启动本指令中提到的服务。 |
BindsTo | 此指令将当前服务链接到所提及的服务。如果链接的服务重新启动,当前服务也将重新启动。 |
除了这些指令外,还有两个指令:Condition和Assert。许多服务需要特定的系统条件才能成功运行,这些指令用于提及条件。
[安装]部分
本节不是强制性的,仅当服务需要在启动时激活或停用时才需要。此外,还要提到别名服务。下面列出了安装部分的常用指令:
指令 | 描述 |
WantedBy | 此指令设置服务的运行级 * 目标。如果目标设置为www.example.com,则服务将在此运行级别上启用。 |
联系我们 | 这个指令与WantedBy相似,但是,即使没有指令中提到的依赖项,服务也会被启用。 |
别名 | 此指令用于使用另一个名称启用服务。启用服务时,将创建一个使用此名称的符号链接。 |
多数情况下,多用户.Target被用作WantedBy参数。但是什么是多用户目标呢?
www.example.com表示准备接受非图形多用户会话的系统状态。这是启动GUI之前的状态。
系统有不同的运行级别,让我们来了解一下这些运行级别的功能。
在system d中,根据运行级别对服务进行分组,这些级别称为目标。每个运行级在/etc/systemd/system目录中都有一个扩展名为.Target的文件。服务将基于运行级别的状态运行。
运行级别 | 目标 | 状态 | 文件 |
0 | poweroff | 关闭电源(&F) | Poweroff.target |
1 | 救援 | 启动救援炮弹 | rescue.target |
2,3,4 | 多用户 | 启动多用户非图形用户界面外壳 | multi-user.target |
5 | 图形 | 建立多用户图形用户界面外壳 | graphical.target |
6. | 重新启动 | 关闭和重新启动 | Reboot.target |
[服务]科
此部分包含服务的配置设置。本节的主要配置是定义在服务开始时要执行的类型和命令。Type和ExecStart是用于设置服务的主要指令。
下表列出了不同类型的服务。
服务类型 | 描述 |
简单 | 当没有提到类型或Busname,而只提到ExecStart时,它是默认类型。systemd首先执行主流程,然后执行后续单元。 |
分叉 | 此类型用于在父服务关闭的情况下保持服务运行。它在父进程关闭后派生子进程。 |
一次拍摄 | systemd首先执行主进程,当主进程退出时,后续单元将启动。 |
dbus | 带有dbus的服务用于与总线上的另一个进程通信。如果提到总线名称,则在获取总线名称后,进程将被激活。 |
通知 | 服务将在启动进程时通知。系统管理员会在发出通知后前往跟进单位。 |
闲散 | 它保持服务,直到所有活动作业都被分派;主要用于改进控制台输出。 |
以下是"服务"一节中常用的指令:
指令 | 描述 |
ExecStart | 它保存要执行以开始该进程的命令的完整路径。 |
ExecStartPre | 它保存在主进程开始之前应该执行的命令。 |
ExecStartPost | 它保留了主进程开始后应该执行的命令。 |
行政长官 | 它保留重新加载服务配置的命令。 |
重新启动 | 在出现故障、成功、异常、中止和看门狗等情况下自动重新启动服务。 |
RestartSec | 以保存服务将自动重新启动之前的秒数。 |
ExecStart是Service部分中使用的关键指令之一。它包含服务在调用时将执行的可执行文件的完整路径。
结论
systemd服务文件是一个配置文件,它由指令和命令构成,以便systemd可以管理它们。这些文件包含指示systemd如何管理服务的说明。在本指南中,我介绍了如何访问systemd服务文件、其部分以及管理服务的指令。要了解更多关于服务文件说明的信息,请阅读此处的官方文档指南。