回顾:
centos系统的启动流程:POST àboot sequeue(BIOS)à bootloader(mbr) à kernel(ramdisk)àrootfs à/sbin/init
init:
centos5:sysv init
centos6:upstart
centos7:systemd
system的新特性:
系统引导时实现服务并行启动;
按需激活进程;
系统状态快照;
基于依赖关系定义服务控制逻辑;
核心概念:unit
unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其他与init相关的信息;这些配置文件主要保存在:
/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
unit的常见类型:
service init:文件扩展名为.service,用于定义系统服务;
target unit:文件扩展名为.target,用于模拟实现“运行级别”;
device unit:.device,用于定义内核识别的设备;
mount unit:.mount,用于定义文件系统挂载点;
socket unit:.socket,用于标识进程间通信用到的socket文件;
snapshot unit:.snapshot,管理系统快照;
swap unit:.swap,用于标识swap设备;
automount unit :.automount,文件系统自动点设备;
path unit:.path,用于定义文件系统中的文件或目录;
关键特性:
基于socket的激活机制:socket与程序分离;
基于bus的激活机制;
基于device的激活机制;
基于path的激活机制;
系统快照:保存各unit的当前状态信息于持久存储设备中;
向后兼容sysv init脚本;
/etc/init.d
不兼容:
Systemctl的命令时固定不变的;
非由systemd启动的服务,systemctl无法与之通信;
管理系统服务:
Centos7:service类型的unit文件
systemctl命令:
- Control the systemd system and servicemanager
systemctl [OPTIONS...] COMMAND [NAME...]
启动:service NAME start ==> systemctl startNAME.service
停止:service NAME stop ==> systemctl stopNAME.service
重启:service NAME restart ==> systemctlrestart NAME.service
状态:service NAME status ==> systemctlstatus NAME.service
Centos6:
Centos7:
条件式重启:service NAME condrestart ==> systemctl try-restart NAME.service
重载或重启服务:systemctl reload-or-restart NAME.service
重载或条件式重启服务:systemctl reload-or-try-restartNAME.service
查看某服务当前激活与否的状态:systemctl is-activeNAME.service
查看所有已激活的服务:systemctl list-units --typeservice
查看所有服务(已激活及未激活):chkconfig --list ==> systemctl list-units -t service--all
设置服务开机自启:chkconfig NAME on ==> systemctl enable NAME.service
禁止服务开机自启:chkconfig NAME off ==> systemctl diable NAME.service
查看某服务是否能开机自启:chkconfig –list NAME ==>systemctl is-enabled NAME.service
查看服务的依赖关系:systemctl list-dependenciesNAME.service
管理target units
运行级别:
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
7 ==> runlevel6.target,reboot.target
级别切换:init N ==> systemctl isolate NAME.target
查看级别:runlevel ==> systemctl list-units–type target
查看所有级别:systemctl list-units -t target –a
获取默认运行级别:systemctl get-default
修改默认运行级别:systemctl set-default NAME.target
切换至紧急救援模式:systemctl rescue
切换至emergency模式:systemctlemergency
其它常用命令:
关机:systemctl halt,systemctlpoweroff
重启:systemctl reboot
挂起:systemctl suspend
快照:systemctl hibernate
快照并挂起:systemctl hybrid-sleep
Serviceunit file:
文件通常由三部分组成:
[unit]:定义与unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等;
[service]:与特定类型相关的专用选项;此处为service类型;
[install]:定义由“systemctlenable”以及“systemctl disable”命令在实现服务启用或禁用时用到的一些选项
Unit段的常用选项:
Description:描述信息;意义性描述;
After:定义unit的启动顺序;表示当前unit应该晚于哪些unit启动;其功能与before相反;
Requires:依赖到的其它units;强依赖,被依赖的units无法激活时,当前的unit即无法激活;
Wants:依赖到的其它units;弱依赖;
Conflicts:定义units间的冲突关系;
Service段的常用选项:
Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型;
类型:
simple:默认值,这个daemon主要由Execstart接的指令串来启动,启动后长驻于内存中;
forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。
oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻于内存之中;
dbus:与simple 类似,但这个damon必须要在取得一个D-bus的名称后,才会继续运作,因此通常也要同时设定BusNname才行
notify:
idle:
EnvironmentFile:环境配置文件;
ExecStart:指明启动unit要运行的命令或脚本;ExeStartPre,ExecStartPost
Restart:
Install段的常用选项:
Alias:别名可使用systemctl command alias.service
RequiedBy:被哪些units所依赖;
WantedBy:被哪些units所依赖;
Note:对于新创建的unit文件或修改了的unit文件,要通知systemd重载配置文件;
#systemctl daemon-reload