Centos系统中 Systemd 的Unit文件配置说明

Centos系统中 Systemd 的Unit文件配置说明,第1张

Systemd使用单元(Units)来拿纯管理系统服务和程序。系统单元使用配置文件来控制其相关 *** 作。单元配置文件有三种类型:默认单元配置文件,系统特定的单元配置文件和运行时的单元配置文件。

下面列出了三种类型的单元配置文件所在路径:

默认单元配置文件 - /usr/lib/systemd/system

运行时的配置文件 - /run/systemd/system

系统特定的配置文件 - /etc/systemd/system

默认单元配置文件 ,当安装新软件包时,在安装过程中,单元配置文件会在/usr/lib/systemd/system目录中生成。

运行时单元配置文件 ,分别在units启动和停止时,会自动生成和删除。

系统特定的配置文件 包含定制的单元配乎旁置。通过这些配置文件,用户可以覆盖units的默认行为。

当我们对系统服务和程序的状态进行任何更改时,例如:start, stop, enable, 和disable时,systemd读取并执行其单元配置文件。按照以下顺序检查单元配置文件。

系统特定的单元配置文件、运行时单元配置文件、默认单元配置文件。

例如,如果一个units配置岁敏橡文件在着三个路径下面都存在,则仅使用 系统特定的配置文件 - /etc/systemd/system。

Unit配置文件书写格式

一个单元配置文件包含控制该单元的所有必需信息,例如;启动Units文件的路径,在Units之前和之后需要启动的 service/units 的名称,文档、手册的位置,依赖项信息,冲突信息等。

Unit配置文件中的信息通常分为三部分。[Unit],[Type], [Install]。

下面寻找一个Unit配置文件来解释:

[root@localhost ~]# cat /usr/lib/systemd/system/sshd.service

[Unit]

Description=OpenSSH server daemon

Documentation=man:sshd(8) man:sshd_config(5)

After=network.target sshd-keygen.target

Wants=sshd-keygen.target

[Service]

Type=notify

EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config

EnvironmentFile=-/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

www.donews.com/news/detail/4/2969423.html

server.51cto.com/sOS-515608.htm

prnews.techweb.com.cn/qiyenews/archives/63741.html

Unit部分

该部分通常包含 描述、文档、与其他程序依赖的设置、包括在什么服务 之前 或者 之后 启动该Units的设置等。

Description:  该语句提供简要的描述。可以在systemctl list-units或者systemctl status [Units]时看到描述。

Documentation:  该语句提供手册(帮助文档)页面的位置以及访问手册页面的 命令

After:  该语句列出了在该单元之后应激活的单元。仅仅是规范服务启动的顺序,并没有强制要求启动。

Before:  该语句列出了在该单元之前应激活的单元。仅仅是规范服务启动的顺序,并没有强制要求启动。

Wants:  定义该单元启动之后还需要启动哪些unit。

Requires:  明确了定义该单元需要在哪个单元启动之前才能启动,如果前面的unit没有启动,那么该unit也不会被启动。

Conflicts:  该语句列出了在启动该单元之前必须停止的单元/服务。

一个单元的After/Before语句定义了该单元应该启动的顺序。一个单元的want/Requires语句定义了该单元的依赖关系。

Type部分

该部分表示Unit的类型。类型有[Service],[Socket],[Timer],[Mount],[Path]等类型,本文中使用的是sshd.service当例子,所以这边就使用[Service]类型来介绍。

下面列举常用语句:

Type :  表示启动的类型,有以下几种类型:simple为默认值、forking、oneshot等类型。

EnvironmentFile:  可以有多个该语句、后面跟配置文件。

ExecStart:  后面接启动的语句

ExecStop:  后面接停止服务的语句

ExecReload:  后面接重启服务的语句

KillMode:  该语句如果是process,当终止进程时,它会终止主程序。如果时none时,则不会关闭程序。

Install部分

该部分时将此Unit安装到哪一个target中去。常用会安装在multi-user.target

WantedBy:  自动启动该Unit的Target名称。例如,如果在此语句中看到multi-user.target,则意味着当系统进入“multi-user.target”运行级别时,此Unit将自动启动。

可以看到,当执行systemctl enable sshd.service时,会将sshd.service从/usr/lib/systemd/system目录中创建超链接到/etc/systemd/system/multi-user.target.wants下面。

总结

Systemd使用单元(Units)来管理系统服务和程序。系统单元使用配置文件来控制其相关 *** 作。单元配置文件有三种类型:默认单元配置文件,系统特定的单元配置文件和运行时的单元配置文件。

(1) 什么是单元 在RHEL7之前,服务管理是分布式的被SysV init或UpStart通过/etc/rc.d/init.d下的脚本管理。这些脚本是经典的Bash脚本,允许管理员控制服务的状态。在RHEL7中,这些脚本被服务单元文件替换。 在systemd中,服务、挂载等资源统一被称为单元,所以systemd中有许多单元类型,服务单元文件的扩展名是.service,同脚本的功能相似。例如有查看、启动、停止、重启、启用或者禁止服务的参数。 systemd单元文件放置位置: /usr/lib/systemd/system/systemd默认单元文件安装目录 /run/systemd/systemsystemdsystemd单元运行时创建,这个目录优先于按照目录 /etc/systemd/system系统管理员创建和管理的单元目录,优先级最高。 (2)systemd的服务管理 使用systemcl命令可以控制服务,service命令和chkconfig命令依然可以使用,但是主要是出于兼容的原因,应该尽量避免使用。 使用systemctl命令的时候,服务名字的扩展名可以写全,例如: 代码如下: systemctl stop bluuetooth.service 也可以忽略,例如: 代码如下: systemctl stop bluetooth systemctl常用命令: 启动服务 代码如下: systemctl start name.service 关闭服务 代码如下: systemctl stop name.service 重启漏衡做服务 代码如下: systemctl restar tname.service 仅当服务运行的时候,重启服务 代码如下: systemctl try-restart name.service 重新加载服务配置文件 代码如下: systemctl relaod name.service 检查服务运拦吵作状态 代码如下: systemctl status name.service 或者 代码如下: systemctl is-active name.service 展示所有服务状态详细信息 复制代码 代码如下: systemctl list-units--type service --all 允许服务开机启动 代码如下: systemctl enable name.service 禁止服务开机启动 代码如下: systemclt disable name.service 检查服务开机启动状态 代码如下: systemctl status name.service 或者 代码如下: systemctl is-enabled name.service 列出所有服务并且检查是否开机启动 代码如下: systemctl list-unit-files --type service (3)服务详细信息查看 使用如下命令列出服务: 代码如下: systemctl list-units --type service 默认只列出处于激活状态的服务,如果希望看到所有的服务,使用--all或-a参数: 代码如下: systemctl list-units--type service --all 有时候希望看到所以可以设置开机启动的服务,使用如下命令: 代码如下: systemctl list-unit-files --type service 查看服务详细信息,使用如下命令: 代码如下: systemctl status name.service 服务信息关键词解释 Loaded服务已经被加载,显示单元文件绝对路径,标志单元文件可用。 Active服务已经被运行,并且有启动时间信息。 Main PID与进程名字一返衡致的PID,主进程PID。 Status服务的附件信息。 Process相关进程的附件信息。 CGroup进程的CGroup信息。

Systemd 并不是一个命令,而是闹携一组命令,涉及到系统管理的方方面面。

systemctl 是 Systemd 的主命令,用于管理系统。

systemd-analyze 命令用于查看启动耗时。

hostnamectl 命令用于查看当前主机的信息。

localectl 命令用于查看本地化设置。

timedatectl 命令用于查看当前时区设置。

loginctl 命令用于查看当前登录的用户。

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。

Unit 一共分成12种。

systemctl list-units 命令可以查看当前系统的所有 Unit 。

systemctl status 命令用于查看系统状态和单个 Unit 的状态。

除了 status 命令, systemctl 还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。

对于用户来说,最常用的是下面这些命令,用于启动和停止 Unit(主要是 service)。

Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。

systemctl list-dependencies 命令列出一个 Unit 的所有依赖。

上面命令的输出结果之中,有些依赖是 Target 类型(详见下文),默认不会展开腊樱显示。如果要展开 Target,就需要使用 --all 参数。

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。

Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/ ,真正的配置文件存放在那个目录。

systemctl enable 命令用于在上面两个目录之间,建立符号链接关系。

如果配置文件里面设置了开机启动, systemctl enable 命令相当于激活开机启动。

与之对应的, systemctl disable 命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。

配置文件的后缀名,就是该 Unit 的种类,比如 sshd.socket 。如果省略,Systemd 默认后缀名为 .service ,所以 sshd 会被理解成 sshd.service 。

systemctl list-unit-files 命令用于列出所有配置文件。

这个命令会输出一个列表。

这个列表显示每个配置文件的状态,一共有四种。

注意,从配置文件的状态无法看出,该 Unit 是否正在运行。这必须执行前面提到的 systemctl status 命令。

一旦修改配置文件,就要让 SystemD 重新加载轮弯丛配置文件,然后重新启动,否则修改不会生效。

配置文件就是普通的文本文件,可以用文本编辑器打开。

systemctl cat 命令可以查看配置文件的内容。

从上面的输出可以看到,配置文件分成几个区块。每个区块的第一行,是用方括号表示的区别名,比如 [Unit] 。注意,配置文件的区块名和字段名,都是大小写敏感的。

每个区块内部是一些等号连接的键值对。

注意,键值对的等号两侧不能有空格。

[Unit] 区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。

[Install] 通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。

[Service] 区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。

Unit 配置文件的完整字段清单,请参考 官方文档 。

启动计算机的时候,需要启动大量的 Unit。如果每一次启动,都要一一写明本次启动需要哪些 Unit,显然非常不方便。Systemd 的解决方案就是 Target。

简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状态。

传统的 init 启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。不同的是,RunLevel 是互斥的,不可能多个 RunLevel 同时启动,但是多个 Target 可以同时启动。

Target 与 传统 RunLevel 的对应关系如下。

它与 init 进程的主要差别如下。

(1)默认的 RunLevel (在 /etc/inittab 文件设置)现在被默认的 Target 取代,位置是 /etc/systemd/system/default.target ,通常符号链接到 graphical.target (图形界面)或者 multi-user.target (多用户命令行)。

(2)启动脚本的位置 ,以前是 /etc/init.d 目录,符号链接到不同的 RunLevel 目录 (比如 /etc/rc3.d 、 /etc/rc5.d 等),现在则存放在 /lib/systemd/system 和 /etc/systemd/system 目录。

(3)配置文件的位置 ,以前 init 进程的配置文件是 /etc/inittab ,各种服务的配置文件存放在 /etc/sysconfig 目录。现在的配置文件主要存放在 /lib/systemd 目录,在 /etc/systemd 目录里面的修改可以覆盖原始设置。

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是 /etc/systemd/journald.conf 。

journalctl 功能强大,用法非常多。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12261898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存