系统启动流程(六)

来源:互联网 发布:生日祝福网页源码 编辑:程序博客网 时间: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:休眠并挂起
原创粉丝点击