系统启动流程(六)
来源:互联网 发布:生日祝福网页源码 编辑:程序博客网 时间:2024/05/07 11:04
在CentOS 7版本中,与以前init管理进程完全的更改,使用systemd管理进程服务等。与以前的模式,脚本都不相同。
1、启动流程
(a)POST –>Boot Sequence–>BootLoader–>Kernel(ramfs)–>rootfs–>systemd
(1)UEFi或BIOS初始化,运行POST开机自检(2)选择启动设备(3)引导装载程序, centos7是grub2加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg(4)加载initramfs驱动模块(5)内核初始化(6)执行initrd.target所有单元,包括挂载/etc/fstab(7)从initramfs根文件系统切换到磁盘根目录systemd执行默认target配置,配置文件 /etc/systemd/system/default.target
(b)
- systemd执行sysinit.target初始化系统及basic.target准备操作系统
- systemd启动multi-user.target下的本机与服务器服务
- systemd执行multi-user.target下的/etc/rc.d/rc.local
- Systemd执行multi-user.target下的getty.target及登录服务
- systemd执行graphical需要的服务
2、systemd
(1)简介
系统启动和服务器进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程。
(2)新特性:
(a)系统引导时实现服务并行启动;(b)按需启动守护进程;(c)自动化的管理服务依赖关系;(d)采用socket与D-bus总线式激活服务;(e)系统状态快照;
(3)unit
(1)unit意义
unit表示不同类型的systemd对象,通过配置文件进行表示和配置;文件主要包括系统服务、监听socket、保存的系统快照以及其他与init进程有关的信息。
(2)unit类型
- Service unit: 文件扩展名为.service, 用于定义系统服务。
Target unit: 文件扩展名为.target,用于模拟实现运行级别。
注意:只有/lib/systemd/system/*.target
文件中AllowIsolate=yes才能切换。(修改文件需执行systemctl daemon-reload
才能生效。)Device unit: .device, 用于定义内核识别的设备。
- Mount unit: .mount, 定义文件系统挂载点
Socket unit: .socket, 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动。 - Snapshot unit: .snapshot, 管理系统快照。
- Swap unit: .swap, 用于标识swap设备。
- Automount unit: .automount,文件系统的自动挂载点。
- Path unit: .path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool 目录。
(4)配置文件
/usr/lib/systemd/system/*
:每个服务最主要的启动脚本设置,发行版打包者使用。 /run/systemd/system/*
:系统执行过程中所产生的服务脚本。 /etc/systemd/system/*
:管理员建立的执行脚本,系统管理员和用户使用。
详解 /etc/sytemd/system/*
文件中默认时间单位为秒,可以使用毫秒(ms)分钟(m)等。相关bool值说明:表示开启,1、yes、on、true;表示关闭,0,no、off、false。
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等。
- Description:描述信息
- After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
- Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
- Wants:依赖到的其它units,弱依赖
- Conflicts:定义units间的冲突关系
[UNIT TYPE]:与特定类型相关的专用选项;
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服务意外终止后,会再次自动启动此服务。
[Install]:定义由“systemctl enable”以及”systemctl disable“命令在实现服务启用或禁用时用到的一些选项
- Alias:别名,可使用systemctl COMMAND Alias.service
- RequiredBy:被哪些units所依赖,强依赖
- WantedBy:被哪些units所依赖,弱依赖
- Also:安装本服务的时候还要安装别的相关服务
文件优先级: /etc/systemd/system/*
>run/systemd/system/*
>/lib/systemd/system/*
注意:服务没有启动之前,修改配置文件可以即时生效;否则,使用命令systemctl daemon-reload
使配置文件生效。
3、systemctl命令
查看unit类型
systemctl -t help
管理服务:
systemctl COMMAND Name.UnitTypestart:重启服务,可以一次启动多个服务。stop:停止服务restart:重启服务status:查看服务状态try-restart:条件式启动,已启动才重启reload-or-restart:重载或重启服务reload-or-try-restart:重载或条件式启动mask:禁止自动和手动启动unmask:取消禁止手动和自动启动is-active:查看服务当前激活与否的状态enable:设定某服务开机自启disable:设定某服务开机禁止启动is-enabled:查看服务是否开机自启list-dependencies:查看服务的依赖关系
查看已经激活的服务 systemctl list-units --type|-t service (-a|--all查看所有服务)
查看所有开机服务状态 systemctl list-units-files --type service
- loaded:Unit配置文件已处理
- active(running):一次或多次持续处理的运行
- active(exited):成功完成一次性的配置
- active(waiting):运行中,等待一个事件
- inactive:不运行
- enabled:开机启动
- disabled:开机不启动
- static:开机不启动,但可被另一个启用的服务激活
杀掉进程 systemctl kill
进程名
注意:systemctl命令是固定不变,不可扩展。非由systemd启动的服务,systemctl无法与之通信。
管理运行级别:
运行级别
- 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
查看开启启动运行级别: systemctl list-units-files -t target -a
格式:
systemctl COMMAND Name.target
list-dependencies:查看依赖性
isolate:切换级别
查看开机此级别下 systemctl list-units -t target
获取默认运行级别 systemctl get-default
修改默认级别 systemctl set-default Name.target
注意:在CentOS 7中不建议使用init
名字切换运行级别。因为系统中又很多依赖的unit。
其他命令:
格式
systemctl COMMAND
- rescue:切换至救援模式
- emergency:切换至emergency模式
- reboot:重启
- halt,poweroff:关机
- suspend:挂载
- hibernate:休眠
- hybrid-sleep:休眠并挂起
- 系统启动流程(六)
- Android系统启动流程 六--system server启动
- 系统启动流程(三)
- 系统启动流程(五)
- 系统启动流程(七)
- linux系统启动(bootstrap)流程
- CentOS系统启动流程(二)
- CentOS 系统启动流程(四)
- Android系统启动流程(二)
- 系统启动流程
- 系统启动流程
- 系统启动流程
- 系统启动流程
- LINUX系统启动流程 (十个步骤)
- Linux学习教程(八)系统启动流程
- 图解Linux系统启动流程(grub)
- Android系统启动流程(nougat7.1.1_r6)
- CentOS系统启动流程详解(一)
- druid 元数据接口查询
- 2018年9月份华为面试
- 电子邮件收发原理和JavaMail开发
- CF850B Arpa and a list of numbers【思路】
- java复习1 基本数据类型 常量变量命名 运算优先级
- 系统启动流程(六)
- 程序员的八重境界
- 最近有点爆炸
- 【1】TFTP软件的开发
- Event loop的理解
- 在Intellij IDEA中使用Debug
- Lua 的简介
- c#自定义特性
- QT之network