Linux之引导和服务
一、引导过程
- kernel内核
- rootfs包括程序和glibc库
操作系统存储在
- 硬盘
- 光驱或U盘
- 网络的远端机器
GRUB 统一启动加载器 加载操作系统
- 加电自检 检测硬件是否有故障 如果无故障 就去bios中设置的第一个启动项找操作系统
- 第一启动是硬盘,MBR引导 第一个扇区的前446字节,有一个GRUP程序第一阶段,引导硬件找到grup完整的程序
- grup会根据grup.cfg配置文件找到操纵系统
- 加载内核(操纵系统)
- 祖宗进程 centos7 systemd并行 centos6 init串行 启动程序
二、systemd服务
Systemd新特性
-
系统引导时实现服务并行启动
-
按需启动守护进程
-
自动化的服务依赖关系管理
-
同时采用socket式与D-Bus总线式激活服务
-
socket与服务程序分离
-
向后兼容sysv init脚本
-
使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,
-
systemctl无法与之通信和控制
-
系统状态快照
service unit文件格式
service unit file文件通常由三部分组成:
- [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
- [Service]:与特定类型相关的专用选项;此处为Service类型
- [Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
unit 格式说明:
- 以 “#” 开头的行后面的内容会被认为是注释
- 相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
- 时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
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类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
- notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
- idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
- EnvironmentFile:环境配置文件
- ExecStart:指明启动unit要运行命令或脚本的绝对路径
- ExecStartPre: ExecStart前运行
- ExecStartPost: ExecStart后运行
- ExecStop:指明停止unit要运行的命令或脚本
- Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
- RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指
- 定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
- PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务
控制类型
服务:为其他机器提供服务
systemctl start #启动
systemctl status #状态
systemctl stop #停止
systemctl restart #重启
systemctl reload #重新加载配置文件不影响进程
systemctl enable #开机自启
systemctl disable #开机不自启
systemctl enable --now #开机自启并且立马启动
systemctl disable --now #开机不自启并且立马关闭
有.service文件 /usr/lib/systemd/system
运行级别
- 0 关机
- 1 单用户
- 2 功能不全的字符界面,缺少网络块
- 3 完整的字符界面
- 4 未被使用的字符
- 5 图形
- 6 重启