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)来管理系统服务和程序。系统单元使用配置文件来控制其相关 *** 作。单元配置文件有三种类型:默认单元配置文件,系统特定的单元配置文件和运行时的单元配置文件。

systemd是Linux下的中央系统及设定管理程式(init),包括有守护进程,程序库跟应用程序。开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并以此实现系统初始化时服务的并行启动,同时达到降低shell的系统开销,最终替代现在常用的system v与BSD风格init程序。

systemd组件与System V风格init相比,

Systemd特点:

• 平行处理所有服务:

systemd可以并行启动不相依的服务。

• on-deamon启动方式

systemd依靠systemctl命令就可以控制systemd,无需其他命令。常驻内存,因此任何要求 (on-demand) 都可以立即处理后续的 daemon 启动的任务

• 服务相依的自我检查:

例如:B服务是架构在A服务上,你手动启动B服务systemd会自动启动A服务。

• 功能分类

system所管理的服务非常之多,它定义了一个服务就是一个unit,相同的unit分为同一类型,systemd 将服务单位 (unit) 区分为 service, socket, target, path,snapshot, timer 等多种不同的类型(type), 方便管理员的分类与记忆。

• 将多个 daemons 集合成为一个群组

如同 systemV 的 init 里头有个 runlevel 的特色,systemd 亦将许多的功能集合成为一个所谓的 target 项目,这个项目主要在设计 *** 作环境的创建, 所以是集合了许多的 daemons,亦即是执行某个 target 就是执行好多个daemon 的意思

• 向下兼容Init服务脚本

基本上, systemd 是可以相容于 init 的启动脚本的,因此,旧的 init 启动脚本也能够通过 systemd 来管理,只是更进阶的 systemd 功能就没有办法支持

Systemd的核心概念是:unit,unit由其相关配置文件进行标识,识别和配置,文件中主要包含了系统服务、监听的socket、保存的快照以及其它与init相关的信息; 这些配置文件主要保存在:

/usr/lib/systemd/system

/run/systemd/system

/etc/systemd/system

target

system所管理的服务非常之多,它定义了一个服务就是一个unit,相同的unit分为同一类型,systemd 将服务单位 (unit) 区分为 service, socket, target, path,snapshot, timer 等多种不同的类型(type), 为了方便管理员的分类、记忆与管理,把多个unit 集合在一起,组成一个target,执行这个target即可执行对应下的多个unit。

systemd将过去的运行级别划分成对应的target,如下:

运行级别:

0 ==> runlevel0.target, poweroff.target

1 ==> runlevel1.target, rescue.target

2 ==> runlevel2.tartet, multi-user.target

3 ==> runlevel3.tartet, multi-user.target

4 ==> runlevel4.tartet, multi-user.target

5 ==> runlevel5.target, graphical.target

6 ==> runlevel6.target, reboot.target

service unit file:

通常由三部分组成:

[Unit]:定义与Unit类型相关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等;

[Service]:与特定类型相关的专用选项;此处为Service类型;

[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项;

Unit段的常用选项:

Service段的常用选项:

Install段的常用选项:

过程:

写unit文件可以使用yum 安装http服务来参考写

源码安装http

为httpd编写unit文件

经我测试,如果type设置为:simple,启动程序直接由execstart后面的命令直接运行,并且直接运行在后台中,命令执行起来非常快,但是httpd服务没那么快起来,简单来说,type设置为simple,命令执行虽然快,但因为主进程需要启动子程序,所以直接使用浏览器浏览是看不到效果的;如果设置为forking,命令执行起来很慢,会中断一段时间,但是执行完成后,可以马上浏览看到效果, 并且使用simple有个弊端,因为httpd开辟了很多子程序提供服务,主进程的作用就是启动子进程,当启动完成以后,主进程会结束自身,所以再次使用systemctl status httpd查看,就会显示inactive状态,但其实已经启动了 。如果把type设置为:forking,则不会出现这个问题

service的type详细说明:

接下来可以使用systemctl命令来管理httpd了

至此,源码安装http和编写 unit文件并且实现systemd对其管理的实验成功~~~( ^-^ )

1、可以切换到单用户模式,禁止服务的开机自启

输入init=/bin/bash开启,重新挂载根,禁止服务开机启动

1、分区表被破坏后,可以进入救援模式,使用grub进行修复

2、分区MBR的前446个字节删除以后,可以使用grub install /dev/sda 完成修复,不要求/boot下文件存在

1、先进入救援模式,查询文件系统情况,下图可看出,文件系统为ext4,逻辑卷处于未激活状态

2、激活逻辑卷,创建文件夹,临时挂载根目录

5、生成/grub文件夹

1、设置内核参数,只影响当次启动

2、启动时,在linux16行后添加systemd.unit=desired.target

3、systemd.unit=emergency.target

4、systemd.unit=rescue.target

5、rescue.target 比emergency 支持更多的功能,例如日志等

6、systemctl default 进入默认target

1、GRUB“the Grand Unified Bootloader”

引导提示时可以使用命令行界面

可从文件系统引导

2、主要配置文件 /boot/grub2/grub.cfg

3、修复配置文件

grub2-mkconfig >/boot/grub2/grub.cfg

4、修复grub

grub2-install /dev/sda BIOS环境

grub2-install UEFI环境

5、调整默认启动内核

vim /etc/default/grub

GRUB_DEFAULT=0


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

原文地址:https://54852.com/bake/11366629.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存