systemd

systemd的新特性(centos 7)

系统引导时实现服务并行启动

按需激活进程,在此之前可以让进程处于半活动状态

系统状态快照:能够自我保存当前系统上没一个用户空间的进程运行状态快照,将来可以迅速恢复到某一种状态,因此用户空间有了时间机器。可以回滚到过去某一时刻的状态

内在的基于依赖关系定义的服务控制逻辑

对与systemd来讲,引入了一个新的核心概念,叫做unit(单元)

核心概念:unit

unit由其相关的配置文件标识、识别和配置:意思就是每一个unit到底定义了与否主要就看他有没有配置文件。这中文件中主要包含了系统服务、监听的端口。保存的快照以及其他与init相关的信息;因此他们就分成了这样几种类别;系统服务类unit、监听端口类unit、快照类的unit以及其他的unit,而这些配置文件主要保存在;

/usr/lib/systemd/system

/run/systemd/system

/etc/systemd/system

所以说这些目录中的每一个文件都成为unit文件,我们进入到这些目录中可以看到许多文件,以文件的后缀名就可以进行识别,以.service结尾的文件为服务类的unit、以.target结尾的文件为目标类的unit、以.socket结尾的文件为监听端口类的unit…;常用的类别如下;

unit的常见类型:

service unit:

文件扩展名为.service,主要用于定义系统服务;所以他类似我们之前使用service httpd {start|restart|status|stup}等相关操作的一些服务脚本,所以他扮演了以前由/etc/inin.d下的服务脚本所扮演的角色。所以说systemctl启动一个服务的时候主要就是靠这个目录下以.service结尾的unit配置文件,这个文件比此前/etc/init.d下的脚本写起来要容易的多

target unit:

文件扩展名为.target,主要用于模拟实现“运行进别”;起始对与systemd而言没有运行级别一说,他的管理法则与sysV和upstart完全是两回事。

device unit:

文件扩展名为.device,主要用于定义内核识别的设备;一次systemd也能够实现对/dev目录下硬件进行识别

mount unit:

文件扩展名为.mount,主要用于定义文件系统挂载点

socket unit:

文件扩展名为.socket,主要用于标识进程间通讯用到的socket文件;我们知道某一个服务启动并监听在某套件字上时就需要先创建一个套接字文件,而这些就是由socket unit来负责管理的。

snapshot unit:

文件扩展名为.snapshot,主要用于管理系统快照

swap unit:

文件扩展名为.swap,主要用于标识、管理swap设备

automount unit:

文件扩展名为.automount,主要用于文件系统的自动挂载点设置

path unit:

文件扩展名为.path,主要用于定义文件系统中的一个文件或目录;他能够监控指定特定路径下的文件或目录,如果该目录或文件不存在systemd会自动创建之

关键特性:

基于socket的激活机制:

也就意味着socket与程序是分离的;我们可以在某个服务启动时先把socket分配给它,但是这个进程可以先不启动。

基于bus的激活机制;

如果总线上存在对某个服务的访问,就基于总线的请求将其激活

基于device的激活机制;

当某个设备插入的时候,它能够自动去激活mount unit、device unit、automount unit.他能够监控当前系统上或内核中所输出的硬件信息,一旦发现某一硬件来了,
就先创建设备文件,再将其自动挂载至某挂载点,如果挂载点不存在还能自动创建。

基于path的激活机制

系统可以监控某个目录或文件在不在,如何某个文件在了就能立刻激活某一个服务,或者能激活另外一个进程。比方说万一某一个进程在运行当中遇到bug崩溃了,
崩溃的时候创建了一个log文件,一旦systemd发现了这个文件就立即去激活一个额外的程序去检测,例如激活一个窗口去提醒用户。

系统快照:

他的好处在于保存各unit的当前状态,因为systemd的所有管理功能都是通过unit来实现的,因此他能保存各unit的当前状态信息于持久存储设备中;
所以将来如果需要回到某一时刻的时候就可以回滚,让用户可在过去与现在之间游走。

向后兼容sysV init脚本;

这就意味着放在/etc/init.d/下的服务脚本,也一样能够靠systemd来启动控制,但是他也有不兼容的内容;
不兼容:
    systemctl的命令是固定不变的;
    非由systemd启动的服务,systemctl无法与之通信,也就意味着无法控制此服务。

如何管理系统服务;

centos 7:系统服务主要是靠service类型的unit文件来实现管控的,而且兼容/etc/init.d/下的给类型服务脚本

systemctl命令
    systemctl [options...] command [name...]

    启动:service name start ==> systemctl start name.service
    停止:service name stop ==> systemctl stop name.service
    重启:service name restart ==> systemctl restart name.service
    状态:service name status ==> systemctl status name.service
    条件式重启:service name condrestart ==> systemctl try-restart name.service
    重载或重启服务:systemctl reload-or-restart name.service
    重载或条件式重启服务:systemctl reload-or-try-restart name.service

    查看某服务当前激活与否的状态:systemctl is-active name.service
    查看所有已激活的服务:systemctl list-units --type service
    查看所有服务(已激活及未激活):chkconfig --list ==> systemctl list-units -t service --all  

    设置服务开机自启:chkconfig name on ==> systemctl enable name.service
    禁止服务开机自启:chkconfig name off ==> systemctl disable name.service
    查看某服务是否能够开机自启:chkconfig --list name ==> systemctl is-enabled name.service

    禁止某服务设定为开机自启和手动启动:systemctl mask name.service
    取消此禁止:systemctl unmask name.service

    查看服务的依赖关系:systemctl list-dependencies name.service

如何管理target unit:

运行级别:

0 ==> runlevel0.target,poweroff.target:关机
1 ==> runlevel1.target,rescue.target:单用户级别(救援模式)
2 ==> runlevel2.target,multi-user.target:多用户模式
3 ==> runlevel3.target,multi-user.target:多用户模式
4 ==> runlevel4.target,multi-user.target:多用户模式
5 ==> runlevel5.target,graphical.target:图形界面
6 ==> runlevel6.target,reboot.target:重启

级别切换:

init N ==> systemctl isolate name.target

查看当前运行级别:

runlevel ==> systemctl list-unit --type target

查看所有级别:

systemctl list-units -t target -a

获取默认运行级别:

systemctl get-default

修改默认运行级别:

systemctl set-default name.target

切换至紧急救援模式:

systemctl rescue

切换至emergency(紧急)模式:(不装载设备驱动,也不启动/etc/init.d/下的系统设定脚本)

systemctl emetgency

其他常用命令

关机:systemctl halt,systemctl poweroff
重启:systemctl reboot
挂起:systemctl suspend
快照:systemctl hibernate
快照并挂起:systemctl hybrid-sleep

/usr/lib/systemd/system和/etc/systemd/system/的联系

systemdsystemdsystemd

所谓获取默认运行级别或者设定默认运行级别就是把/etc/systemd/system/目录下的文件向对应的连接修改了而已.
他们是用于设定运行级别以及每一个级别下启动的服务和服务之间的依赖关系的

service unit文件是如何组织的

service unit file:

以httpd为例;(这里vim打开httpd.service文件为例) systemd 此文件通常由三段配置组成;unit,service,install

unit:定义与unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系等
service:与特点类型相关的专用选项:此处为service类型
install:定义由"systemctl enable"以及"systemctl disable"命令在是实现服务启用或禁用时用到的一些选项
unit段的常用选项
Descrription:描述信息;意义性描述
After:定义unit的启动次序;表示当前unit应该晚于哪些unit启动;其功能与Before相反
Requies:依赖到的其他units;强依赖,被依赖到的units无法激活时,当前units即无法激活
Wants:指明依赖到的其他unit;弱依赖,被依赖到的units无法激活时,不影响当前units的激活
Conflicts:定义units间的冲突关系
service段的常用选项:
Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型;
    类型:
        simple:表示Execstart指明的程序所启动的进程是一个主进程
        foeking:表示由Execstart指明的程序所启动的进程生成的一个子进程将成为主进程
        oneshot:功能类似与simple,不过在启动后续units之前主进程将会退出.
        dbus:功能也类似与simple,但是后续的units尽在主进程得到dbus名称之后才能启动
        notify:类似与simple,它表示后续的units仅在通过sdnotify函数发送通知以后,才能运行这个命令.
        idle:类似与simple
Environmentfile:环境配置文件,此文件会在Execstart之前被读取,并为Execstart提供一些变量等自定义功能
Execstart:指明启动unit要运行的命令或脚本;ExecStartpre,ExecStartpost
ExecStop:指明停止unit要运行的命令脚本
Restart:表示启动了此项会导致进程退出后重启相关服务的;意思就是进程如果以外终止了,他会自动将其重新启动起来
Install段的常用选项:
Alias:表示当前unit的别名
RequiredBy:被哪些units所依赖
WantedBy:被哪些units所依赖

注意:对于新创建的unit文件或修改了的unit文件,要通知systemd重载此配置文件;命令如下;

# systemctl daemon-reload

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/48727

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-26 09:58

    总结的很好,通读下来能学到很多东西,受教了。