Systemd
init(启动程序)
- CentOS 5: SysV init(Unix System V)
- CentOS 6:
Upstart
(Ubuntu) - CentOS 7:
Systemd
(System daemon,参考 Mac OSX)
Systemd features
- 系统引导时实现服务并行启动(服务与服务没有依赖时)
- 按需激活进程(访问时激活服务,启动进程)
- 系统状态快照
- 基于依赖关系定义服务控制逻辑
核心概念:unit
unit 由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务,监听的socket、保存的快照以及其它与init相关的信息;
unit 配置文件主要保存在
/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
unit 的常见类型
- service unit:用于定义系统服务
- target unit:用于模拟实现运行级别
- device unit:用于定义内核识别的设备
- mount unit:定义文件系统挂载点
- socket unit:用于标识进程间通信用到的 socket 文件
- snapshot unit:管理系统快照
- swap unit:用于标识swap设备
- automount unit:文件系统自动点设备
- path unit:用户定义系统中的文件或目录
关键特性
- 基于 socket 的激活机制:socket 与程序分离
- 基于 bus 的激活机制
- 基于 device 的激活机制
- 基于 path 的激活机制
- 系统快照:保存各 unit 的当前状态信息于持久存储设备中
- 向后兼容 sysv init 脚本
/etc/init.d/
不兼容
- systemctl 的命令是固定不变的
- 非由 systemd 启动的服务,systemctl 无法与之通信
管理系统服务
CentOS 7: service类型的unit文件
- systemctl命令:Control the systemd system and service manager
- 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
重载或条件式重启:
system reload-or-try-restart NAME.service
查看某服务当前激活与否状态:
systemctl is-active httpd.service
查看所有已激活的服务:
systemctl list-units --type service
查看所有服务(已激活及未激活):
chkconfig --list
,systemctl list-units -t service {-a | --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
取消此禁止:
systemtl umask NAME.service
查看服务的依赖关系:
systemctl list-dependencies NAME.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
6 => runlevel6.target, reboot.target
级别切换:
init N => systemctl isolate NAME.target
查看级别:
runlevel => systemctl list-units {-t | --type} target
查看所有级别:
runlevel => systemctl list-units -t target -a
获取默认运行级别:
systemctl get-default
修改默认运行级别:
systemctl set-default NAME.target
切换至紧急救援模式(init 1,加载驱动):
sytemctl rescue
切换至emergency模式(init 1,不加载驱动):
systemctl emergency
关机:
systemctl halt, systemctl poweroff
重启:
systemctl reboot, systemctl
挂起:
systemctl suspend
快照:
systemctl hibernate
快照并挂起:
systemctl hybrid-sleep
service unit file
- 文件通常由三部分组成:
- [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为依赖关系
- [Service]:与特定类型相关的专用选项;此处为Service类型;
- [Install]:定义由systemctl enable以及systemctl disable命令实现服务启用或禁用时用到的一些选项
Unit 段的常用选项
- Description: 描述信息;意义性描述;
- After:定义unit的启动次序;表示当前unit应该晚于哪些unit启动;其功能与Before相反;
- Request:依赖到的其它units;强依赖,被依赖的units无法激活时,当前unit即无法激活
- Wants:依赖到的其它units;弱依赖
- Conflicts:定义units之间的冲突关系
Service 段的常用选项
- Type:用于定义影响ExecStart及相关参数功能的unit进程启动类型
- 类型:
- simple:
- forking:
- oneshot:
- dbus:
- notify: 类似于simple
- idle:
- 类型:
- ExecStart:指明启动unit的要运行的命令或脚本;ExecStartPre, ExecStartPost
- ExecStop:指明停止unit要运行的命令或脚本
- EnviromentFile:环境配置文件
- Restart:
Install 段的常用选项
- Alias:
- RequiredBy:被哪些units所依赖
- WantedBy:被哪些units所依赖
注意:对于新创建的unit文件或修改了的unit文件,要通知systemd重载此配置文件 # systemctl daemon-reload
练习:为当前系统的httpd服务提供一个unit文件