龙空技术网

Linux中init、systemd和运行级别

架构笔记 623

前言:

现在咱们对“centosinittab”可能比较注重,看官们都需要分析一些“centosinittab”的相关资讯。那么小编在网摘上搜集了一些对于“centosinittab””的相关内容,希望你们能喜欢,咱们快快来了解一下吧!

一、init和systemd

init是Linux系统操作中不可缺少的程序之一。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以init始终是第一个进程(其进程编号始终为1)。

在较新的linux系统上,都使用systemd 取代了init,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。systemd为系统启动和管理提供了完整的解决方案。

二、运行级别(run level)

init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefault id值,这个值称为运行级别(run-level)。它决定了系统启动之后运行于什么级别。

运行级别决定了系统启动的绝大部分行为和目的。这个级别从0到6 ,具有不同的功能。不同的运行级定义如下:

  # 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)

  # 1 - 单用户模式

  # 2 - 多用户,没有 NFS

  # 3 - 完全多用户模式(标准的运行级)

  # 4 – 系统保留的

  # 5 - X11 (x window)

  # 6 - 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )

用runlevel查看当前的运行级别:

[root@centos-160 ~]# runlevel

N 3

在过去,init是运行级别的标尺。 但是时代变了。 现在systemctl是皇帝。 所有大多数与运行级别相关的操作都是通过systemctl完成的。

$ systemctl get-default

multi-user.target

systemd类似运行级别的target有哪些?

poweroff.target (相当于runlevel 0) 关闭电源

rescue.target (相当于runlevel 1) 急救

multi-user.target (相当于runlevel 3) 多用户命令行

graphical.target(相当于runlevel 5) 图形界面

reboot.target(相当于runlevel 6) 重启

三、目录 /etc/rc.d/init.d/

目录 /etc/init.d/ 中包含许多系统服务的启动和停止脚本。

其实目录 /etc/init.d 是符号链接文件,实际上是链接到目录 /etc/rc.d/init.d,你可以通过以下命令验证:

[root@centos-160 ~]# ll /etc/init.d

lrwxrwxrwx. 1 root root 11 Apr 27 2020 /etc/init.d -> rc.d/init.d

大多数的 Linux 发行版本中,启动的是目录 /etc/rc.d/init.d/ 下的服务,这个目录下存放都是实际的服务脚本文件。

Linux 的每个运行级别,在 /etc/rc.d/ 下都有一个子目录分别是 rc0.d,rc1.d …… rc6.d,其实这些 rcN.d/ 目录下存放的都是链接到目录 /etc/rc.d/init.d/ 下部分脚本链接文件。每个级别要执行的服务就在相对应的目录下,比如级别 5 要启动的服务就都放在 rc5.d/ 下,但是放在这个 rc5.d/ 下的都是一些链接文件,链接到 /etc/rc.d/init.d/ 中相对应的实际脚本文件。

文件开头的 S 代表 start 就是启动服务的意思,后面的数字 50 就是启动的顺序。

service xxxx start|stop|restart 相当于是对 /etc/init.d/ 下的 xxxx 的封装,相当于是一个管理命令,实际执行的是 /etc/init.d/下的可执行程序。如果 /etc/init.d/下没有该服务的可执行程序,则会查找对应的 service 文件。

标签: #centosinittab