一、init发展史:
Centos 5 :SysV init
Centos 6 :Upstart
Centos 7 :Systemd
二、Systemd的特性:
1,系统引导时实现服务并行启动
2,按需启动守护进程
3,自动化的服务依赖关系管理
4,同时采用D-Bus总线式和Socket式激活服务
5,系统状态快照
三、核心概念: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:文件扩展名为.service,用于定义系统服务
Target unit:文件扩展名为.target,用于模拟运行级别
Device unit:文件扩展名为.device,用于定义内核识别的设备
Mount unit:文件扩展名为.mount,定义文件系统挂载点
Socket unit:文件扩展名为.socket,用于标识进程间通信用到的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
Swap unit:文件扩展名为.swap,用于标识swap设备
Snapshot unit:文件扩展名为.snapshot,用于管理系统快照
Path unit:文件扩展名为.path,用于定义文件系统中的一个文件或目录,常用于当文件系统变化时,延迟激活服务,如:spool 目录
Automount unit:.automount,文件系统的自动挂载点
五、关键特性:
1,基于socket的激活机制,socket与服务程序分离
2,基于d-bus激活机制
3,基于device的激活机制
4,基于path的激活机制
5,系统快照,保存unit的当前状态信息持久存储设备中
6,向后兼容SysV init脚本:/etc/init.d
六、Systemd也有不兼容的情况:
service的脚本格式不完全固定,可以添加
直接使用程序本身的可执行程序启动的服务,使用service命令可以探测到工作状态并进行管理
systemctl的unit格式是固定不变的,不可以自行添加格式
非由systemd启动的服务,systemctl无法控制此服务
(可以自行编写unit脚本,就可以使用systemctl进行管理了)
七、Centos 7 service类型的systemctl命令
1、systemctl [option] COMMAND [name]
启动:service service-name start=>systemctl start service-name
停止:service service-name stop=>systemctl stop service-name
重启:service service-name restart=>systemctl restart service-name
查看状态:service service-name status=>systemctl status service-name
查看unit类型:Systemctl –t help
条件式重启:service service-name condrestart=>systemctl try-restart service-name
重载或重启:systemctl reload-or-restart service-name
重载或条件重启:systemctl reload-or-try-restart service-name
2、状态相关命令:
查看所有服务:systemctl list-units -t service -a
只查看服务单元的状态:systemctl -t service
查看某服务当前激活与否的状态:systemctl is-active service-name
查看已激活的所有服务:systemctl list-units -t service
列出失败的服务:systemctl --failed -t service
查看所有服务的开机自启状态:chkconfig --list ==> systemctl list-unit-files -t service
查看服务是否开机自启:systemctl is-enabled name.service
设置服务开机自启:chkconfig service-name on=>systemctl enable service-name
禁止服务开机自启:chkconfig service-name off=>systemctl disable service-name
禁止服务设定为开机自启:systemctl mask service-name
取消禁止服务设定为开机自启:systemctl umask service-name
查看某服务的依赖关系:sysemctl list-dependencies service-name
杀掉进程:systemctl kill 进程名
3、服务状态指示
systemctl list-units -t service -a 显示所有服务状态
loaded:Unit配置文件已处理
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性的配置
active(waiting):运行中,等待一个事件
inactive:不运行
enabled:开机启动
disabled:开机不启动
static:开机不启动,但可被另一个启用的服务激活
八、管理target units
1、运行级别:0-6
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
2、级别查看及切换:
级别切换:init N=>systemctl isolate name.target
注意:只有当前target文件中AllowIsolate=yes才能切换
级别查看:runlevel=>systemctl list-units -t target
查看所有级别:systemctl list-units -t target -a
查看默认运行级别:systemctl get-default
修改默认运行级别:systemctl set-default name.target
切换至救援模式:systemctl rescuce
切换至紧急模式:systemctl emergency
驱动安装有问题时,可以进入此模式卸载驱动(最简洁的模式)
3、其它常用命令:
关机:systemctl poweroff|halt
重启:systemctl reboot
挂起:systemctl suspend
快照:systemctl hipernate
快照并挂起:systemctl hybrid-sleep
九、service unit文件
1、通常由三部分组成:
[unit]:定义与unit类型无关的通用选项,用于提供unit的描述信息、unit行为及依赖关系等
[service]:定义与特定类型相关的专用选项,此处为service类型
[Install]:定义由"systemctl enable"以及"systemctl disable"命令实现服务启用或禁用时用到的一些选项
2、unit段的常用选项:
Description:描述信息,意义性描述
After:定义unit的启动顺序,表示当前unit应该晚于哪些unit启动,其功能与before相反
Requies:依赖到的其它unit,强依赖,被依赖的unit无法激活时,当前unit就无法激活
Wants:依赖的其它unit,弱依赖,被依赖的unit无法激活时,当前unit仍然可以激活
Conflicts:定义unit间的冲突
3、service段的常用选项:
Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型
simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess 来让 Systemd 接收消息
idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
Environmentfile:环境启动文件
ExeStart:启动unit要运行的命令或脚本
ExeStartPre:启动unit之前预先运行的命令或脚本
ExeStartPost:启动unit之后要运行的命令或脚本
ExeStop:停止unit后要运行的命令或脚本
Restart:重启unit后要运行的命令或脚本
4、Install段的常用选项:
Alias:当前unit的别名
RequiredBy:被哪些unit所依赖,强依赖
WanteBy:被哪些unit所依赖,弱依赖
Also:安装本服务时还要安装哪些相关服务
注意:对于新建的unit文件或修改后的unit文件,需要通知systemd重载此配置文件
重载命令:systemctl daemon-reload