CentOs7 开机启动那些事

最近在做升级系统,对CentOs7 系统启动相关进行了梳理和学习,总结在这里,做一下回顾。

CentOs7启动过程

  • 硬件设备中的 BIOS(Basic Input Output System) 根据设置的启动顺序,开始读取第一个可启动的设备
  • 读取并执行第一个启动设备内MBR(Master Boot Record,主引导分区)中boot loader程序(常见的boot loader 有 grub、spfdisk等)
  • 由boot loader 程序开始加载kernel(内核),kernel会开始进行硬件检测和加载驱动程序
  • 内核加载完毕之后,开始CentOs 独有的操作,以CentOs7 为分界,前后版本有区别:

CentOs 7 以前

  • 内核加载完毕后,调用init进程,init成为了 PID = 1 的进程,init 会取得系统的运行级别run-level

运行级别 run-level:通过设置run level来规定系统运行不通的服务,使linux 有多种使用环境,有以下级别
0 - halt,系统关节,如果设置了此选项则系统无法启动
1 - single user mode,单用户模式,用于系统出问题时进行维护
2 - Multi-user without NFS,无NFS服务(网络文件系统)的多用户模式
3 - Full multi-user mode,多用户模式(默认的)
4 - unused,系统保留
5 - X11, 与run level 3 类似,但加载使用了X window
6 - reboot,重新启动,如果使用此选项,则系统一直 重启
run-level 在文件 /etc/inittab 中

  • init进程执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的环境(如:网络、时区等等)
  • init进程执行相应run-level下,应该启动的服务

在/etc/rc.d 下有rc0.d - rc6.d 7个目录,每个目录对应相应的run-level应该启动的服务
rc0-6.d 每个目录下都是init.d目录的一部分脚本的链接,带K的表示停止(Kill)一个服务,S表示开启(Start)
S给和K还分别给init.d下面的脚本传递了start和stop的参数
传S时相当于执行了/etc/rc.d/init.d/xxx start这条命令,当然K就相当于/etc/rc.d/init.d/xxx stop
K\S 后面的数字,它的作用是用来排序,就是决定这些脚本执行的顺序,数值小的先执行,数值大的后执行
chkconfig 命令来管理服务是否启动
如果想用chkconfig 来管理脚本,则需要在脚本加入注释: # chkconfig: 2345 10 90 表示在2,3,4,5运行级别启动,S10 K90,这样会自动创建链接
chkconfig add xxx
chkconfig xxx on/off 增加启动和停止启动,当然也可以直接手动建立链接
service 命令来管理 各各服务,包括 启动、查看状态、停止等
service xxx start/stop/status/restart

  • init 执行 /etc/rc.d/rc.local

注意:rc.local 需要有可执行权限,有些版本默认是没有可执行权限的

  • init执行终端机模拟程序mingetty 来启动login程序,等待用户登录

CentOs7 以后

  • 内核加载完毕后,调用systemd进程,systemd成为了 PID = 1 的进程,systemd会取得系统的运行级别run-level
    在这里插入图片描述

CentOs7 之后init被systemd代替
init是串行启动,systemd是并行启动
查看系统运行级别
systemctl get-default

在这里插入图片描述

  • systemd进程执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的环境(如:网络、时区等等)
  • systemd进程执行相应run-level下,应该启动的服务

根据相应run-level下链接的服务,来启动服务,如multi-user.target 将启动下面这些服务
在这里插入图片描述

  • /etc/rc.d/rc.local 脚本在systemd 中是作为一个服务来运行的,rc-local.service 这个服务,只有rc.local有可执行权限便会运行
  • systemd 执行终端机模拟程序mingetty 来启动login程序,等待用户登录
/etc/rc.d/init 目录

CentOs7 之前,这个目录的脚本是链接到rcx.d中来启动的
CentOs7 之后,/etc/rc.d/init.d/xxx 被隐式映射到服务单元xxx.service中。但是xxx.service 默认不会开机启动
/etc/rc.d/init 目录下的脚本可以使用 service 和 chkconfig 来管理,也可以使用systemctl 来管理,但是systemctl 不能设置开机自启动,还是使用chkconfig 来进行设置的
在这里插入图片描述
可以看到使用systemctl disable testboot 取消开机启动时,其实是重定向到 /sbin/chkconfig testboot off

注意:
从CentOs7 开始向systemd 过渡,但不是完全切换到systemd,还是有一些保留

systemd、systemctl命令

systemd-analyze blame #查看当前运行单元,从初始化到启动所花的时间
systemd-analyze plot > boot.html #查看启动顺序,输出到文件,浏览器打开
systemctl is-active crond # 查看服务是否处于激活状态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值