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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos系统中 Systemd 的Unit文件配置说明相关的知识,希望对你有一定的参考价值。

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

Centos7中systemd的管理

管理服务

安装应用在/etc/systemd/system下会生成一系列应用的配置文件等,系统管理员和用户使用

/usr/lib/systemd/system:发行版打包者使用

时间单位默认是秒,毫秒(ms),分钟(m)

service unit file文件组成:

[Unit]:描述,依赖关系

Description:描述

After:服务要在After定义的后面的服务启动之后再启动,Before正好相反

Requires:必要的依赖关系,依赖于服务的应用

Wants:弱依赖;

Conflicts:冲突关系,这个地方定义的与服务的冲突关系


[Service]:Service类型

Type:会影响Execstart启动类型,不定义默认为simple

notify:在服务启动之后会发送通知消息

forking:通过spawns延伸出子进程,父进程关闭;

oneshot:一次性,做完就退出

dbus:取得D-Bus的名称才能使用,后方还要定义BusName=才行

idle:不紧急的类型,可等待所有启动完成后再启动


启动服务:

systemctl start "服务名称"(可以同时启动多个服务)


查看服务状态:

systemctl status "服务名称"

                      -l:查看详细的启动过程,如果启动中出现问题,系统会指出哪一个位置出现了问题

重启服务:

systemctl restart "服务名称"


加载配置文件并重启:

systemctl reload "服务名称"


禁止手动启动服务:

systemctl mask "服务名称" | 关闭此功能:systemctl unmask "服务名称"


单单查看服务的状态:

systemctl is-active "服务名称"(启动则是active,非启动为unknow;启动的服务$0w为0,非启动$0为1)


查看所有已经启动的服务:

systemctl list-units -t service


查看所有服务的状态:

systemctl list-unit-files --type service --all

状态解释:

inactive:不运行

enabled:开机启动

disabled:开机不启动

static:开机不启动,也不可手动启动,但可以被另一个服务启动


查看服务开机是否启动

systemctl is-enable "服务名称"


设置开机启动

systemctl enable "服务名称"


关闭开机启动

systemctl disable "服务名称"


查看服务所依赖的一系列资源

systemctl list-dependencies "服务名称"


列出失败的服务:

systemctl --failed -t service


杀掉服务

systemctl kill "服务名称"


Centos 7上的chkconfig部分对应的是/lib/systemd/system/*.target

查看当前的默认等级使用systemctl get-default;

修改使用systemctl set-default "/lib/systemd/system/某一个target"


在grub菜单按"e",找到linux16那一行,在最后添加rd.break;ctrl-x启动

mount -o remount,rw /sysroot

chroot /sysroot

passwd

touch /.autorelabel

exit

reboot


以上是关于Centos系统中 Systemd 的Unit文件配置说明的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 7之systemd学习笔记

CentOS 7 系列系统服务配置--单元(Unit)

centos 7 之systemd

Linux 之centos7 制作服务自启动systemd

Centos7中systemd的管理

centos7新系统配置