系统启动过程当中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工做,就交由init进行启动和管理,在CentOS6以前的init的管理方式都相似,相关的内容咱们在以前的文章中也作出过介绍。在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟你们欧一块儿探讨一些关于CentOS7上的systemd的新特性的内容。具体分为一下几个方面:linux
一、systemd新特性简介centos
二、systemd如何管理系统系统上的各服务服务器
三、systemd管理各个服务时,所依赖的unit文件的组织格式socket
四、systemd相关操做的实际效果展现centos7
init程序是当系统内核启动后,加载完根文件系统,而后就由内核加载了init程序,并将后续用户空间其余程序的启动和管理工做交由init程序进行管理,除非有须要进行内核特权级别操做时,内核才会被用户空间的各个系统调用,完成一些内核级别的操做spa
在CentOS五、6上,init初始化用户空间的启动流程为:/sbin/init程序主要是经过读取/etc/inittab文件来完成必定的任务,完成的任务有:操作系统
定义默认运行级别(/etc/inittab)hibernate
运行系统初始化脚本(/etc/rc.d/rc.sysinit)完成系统初始化rest
关闭指定运行级别下的各服务,启动指定级别下须要开启的各服务htm
启动mingetty虚拟终端,调用login程序,显示登陆提示符,让终端进行登陆
init程序的类型:
centos5:SysV init
其配置文件:/etc/inittab
centos6: Upstart
其配置文件:/etc/inittab和/etc/init/*.conf
centos7:Systemd
其配置文件:/usr/lib/systemd/system/、/etc/systemd/system/
<1>系统引导时实现服务并行启动(前提是并行启动的服务之间没有依赖关系)
<2>按需激活进程(进程在没有访问时是不会被启动的,可是服务仍然处于半活动状态,只是服务没有启动)
<3>系统状态快照,自我保存某一时刻进程用户空间状态的快照,能够回滚到某一个时刻
<4>基于依赖关系定义的服务控制逻辑
CentOS7/RHEL7 systemd详解 http://www.linuxidc.com/Linux/2015-04/115937.htm
为何systemd会被如此迅速的采用? http://www.linuxidc.com/Linux/2014-08/105789.htm
systemd 与 sysVinit 彩版对照表 http://www.linuxidc.com/Linux/2014-09/106455.htm
太有用了!用systemd命令来管理Linux系统! http://www.linuxidc.com/Linux/2014-09/106490.htm
浅析 Linux 初始化 init 系统,第 3 部分: Systemd http://www.linuxidc.com/Linux/2014-12/110383.htm
<1>基于socket的激活机制:socket与程序分离,能够在系统启动时,先把某个服务的socket分配给该服务,但该服务能够事先不用启动
<2>基于bus的激活机制:基于总线的激活
<3>基于device的激活机制:当某个设备接入时,systemd能够自动的去激活诸如device unit、mount unit、automount unit对设备进行识别和挂载等
<4>基于path的激活机制:系统能够自动监控某个目录存不存在,文件存不存在,并根据此判断,来激活别的服务、进程等
<5>系统快照:可以保存各unit的当前状态信息于持久存储设备中;从而实现了回滚机制
<6>能向后兼容sysv init脚本:在centos五、6系统上/etc/init.d/目录下的服务脚本,systemd也可以对其进行管理
不兼容的地方:
1):systemctl的命令是固定不变的,也就是说像在centos6上的各种服务脚本的start、stop这类咱们能够经过修改服务脚本,去实现service 命令使用的时候后面的参数的变化。可是systemctl控制的时候,则没法经过修改服务脚本去实现systemctl后面参数的变化
2):不是由systemd启动的服务,systemctl没法与之通讯,也就是没法对其进行控制。在centos6上,利用服务脚本自身启动时,利用service依然可以对其进行管理,可是centos7上,若是服务脚本自身启动,而不是经过systemctl进行启动,则systemctl就没法对服务作出管理
unit由其相关的配置文件进行标识、识别和配置,也就是说一个unit到底定义与否,由其配置文件进行标识。这类配置文件中主要包含了几个类别:系统服务,监听的socket、保存的快照以及其余与init相关的信息,这些配置文件中主要保存在:
/usr/lib/systemd/system/ 每一个服务最主要的启动脚本设置,相似于以前的/etc/init.d/
/run/systemd/system/ 系统执行过程当中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system/ 管理员创建的执行脚本,相似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行
unit的常见类型:
service unit:这类unit的文件扩展名为.service,主要用于定义系统服务(其扮演了在centos6上/etc/init.d/目录下的服务脚本的做用)
target unit:这类unit的文件扩展名为.target,主要用于模拟实现"运行级别"的概念
device unit:这类unit文件扩展名为.device,用于定义内核识别的设备,而后udev利用systemd识别的硬件,完成建立设备文件名
mount unit:这类unit文件扩展名为.mount,主要用于定义文件系统挂载点
socket unit:这类unit文件扩展名为.socket,用于标识进程间通讯用到的socket文件
snapshot unit:这类unit文件扩展名为.snapshot,主要用于实现管理系统快照
swap unit:这类unit文件扩展名为.swap,主要用于标识管理swap设备
automount unit:这类unit文件扩展名为.automount,主要用于文件系统自动挂载设备
path unit:这类unit文件扩展名为.path,主要用于定义文件系统中的文件或目录
主要是依靠service类型的unit文件进行管控的完成的
systemctl命令:
语法:systemctl [OPTIONS…] COMMAND [SERVICE_NAME.service…]
<1>启动:service SERVICE_NAME start ==> systemctl start SERVICE_NAME.service
<2>中止:service SERVICE_NAME stop ==> systemctl stop SERVICE_NAME.service
<3>重启:service SERVICE_NAME restart ==> systemctl restart SERVICE_NAME.service
<4>状态:service SERVICE_NAME status ==> systemctl status SERVICE_NAME.service
centos7里面状态信息里显示的loaded 表示是否加入到systemctl可管理的列表中(相似centos6中chkconfig –add的概念,若是是loaded,表示已经添加到列表中,后面disabled表示没有开机自动启动)
<5>条件式重启:(至关于若是服务以前启动了,则对服务进行重启,若是服务以前没启动,则不执行任何操做)
service SERVICE_NAME condrestart ==> systemctl tryrestart SERVICE_NAME.service
<6>重载或重启服务:(至关于若是服务支持不重启而重载配置文件,就进行重载,若是服务不支持重载配置文件,就重启服务)
cenntos6不支持
systemctl reload-or-restart SERVICE_NAME.service
<7>重载或条件是重启:(至关于若是服务支持不重启而重载配置文件,就进行重载,若是服务不支持重载配置文件,就重启服务,但重启的前提是该服务以前是开启的)
cenntos6不支持
systemctl reload-or-try-restart SERVICE_NAME.service
<8>查看某服务当前是否激活:
centos6不支持
systemctl is-acive SERVICE_NAME.service
<9>查看全部已激活的服务:
systemctl list-unit –type|-t service
<10>查看全部的服务,也就是全部已经装载load的服务,包含已激活和未激活的:
chkconfig –list ==> systemctl list-unit -t service -a
显示出来的信息的含义:
loaded:Unit配置文件已处理
active(running):一次或屡次持续处理的运行
active(exited):成功完成一次性的配置
active(waiting):运行中,等待一个事件
inactive:不运行
enabled:开机启动
disabled:开机不启动
static:开机不启动,但可被另外一个启用的服务激活
<11>设置服务能够开机自动启动:
chkconfig SERVICE_NAME on ==> systemctl enable SERVICE_NAME.service
<12>禁止服务开机自动启动:
chkconfig SERVICE_NAME off ==> systemctl disable SERVICE_NAME.service
<13>查看某服务是否可以开机自启动:
chkconfig –list SERVICE_NAME ==> systemctl is-enabled SERVICE_NAME.service
<14>禁止某服务设定为开机自启:
systemctl mask SERVICE_NAME.service
<15>取消上述禁止:
systemctl unmask SERVICE_NAME.service
<16>查看服务的依赖关系:
systemctl list-dependencies SERVICE_NAME.service
运行级别的对应关系:
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
<1>级别切换:
init 数字 ==> systemctl isolate NAME.target
<2>查看当前运行级别:
runlevel ==> systemctl –list-unit -t target
<3>查看全部装载的target:
systemctl –list-unit -t target -a
<4>查看默认运行级别:
systemctl get-default
<5>设定默认运行级别:
systemctl set-default NAME.target
centos6修改/etc/inittab文件
<6>切换至紧急救援模式:
systemctl rescue
<7>切换至紧急emergency模式:比紧急救援模式加载的东西更加少,紧急救援模式还会执行系统初始化脚本/etc/rc.d/rc.sysinit系统初始化脚本,但emergency不会执行系统初始化脚本,一般用于当装了某些硬件驱动后没法正常启动时,才进入该模式。
systemctl emergency
关机:systemctl halt、systemctl poweroff
重启:systemctl reboot
挂起:systemctl suspend
快照:systemctl hibernate
快照并挂起:systemctl hybrid-sleep
<1>UEFi或BIOS初始化,运行POST开机自检
<2>选择启动设备
<3>引导装载程序, centos7是grub2
<4>加载装载程序的配置文件: /etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
<5>加载initramfs驱动模块
<6>加载内核选项
<7>内核初始化, centos7使用systemd代替init
<8>执行initrd.target全部单元,包括挂载/etc/fstab
<9>从initramfs根文件系统切换到磁盘根目录
<10>systemd执行默认target配置,配置文件/etc/systemd/default.target /etc/systemd/system/
<11>systemd执行sysinit.target初始化系统及basic.target准备操做系统
<12>systemd启动multi-user.target下的本机与服务器服务
<13>systemd执行multi-user.target下的/etc/rc.d/rc.local
<14>systemd执行multi-user.target下的getty.target及登入服务
<15>systemd执行graphical须要的服务
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-09/135464p2.htm