什么是 init 系统服务?

init(为英语: initialization 的简写)是 Unix 和 类 Unix 系统中用来产生其它所有进程的程序。它以守护进程的方式存在,其进程号为 1。 Linux 系统在引导时加载 Linux 内核后,便由 Linux 内核加载init 程序,由 init 程序完成余下的引导过程,比如加载运行级别,加载服务,引导 Shell/图形化界面等等。

什么是 systemv 守护进程?

System V(缩写为 SysV)在大多数 Linux 发行版中使用最广泛,在 systemv 中,有一个第一个程序在内核加载后运行。该程序称为 init。 Init 做一些事情,其中之一就是加载一系列脚本来启动各种系统服务,例如网络, ssh 守护程序等。
在sysV中,定义了6个运行级别,分别是:
runlevel0 = 关机
runlevel1 = 单用户模式,仅root
runlevel2 = 带网络的单用户模式
runlevel3 = 多用户模式,字符界面,标准模式
runlevel4 = 保留
runlevel5 = 多用户模式,图形界面,X11(X Window)
runlevel6 = 重启

systemv 的问题在于它需要仔细调整。假设您有一个要在启动时运行的网络文件系统( NFS)客户端。在网络正常工作之前运行 NFS 没有任何意义。因此,您必须确保它等待启动,直到网络已经正常工作为止。Systemv init 这样做的方法是为服务启动设置严格的顺序。每个服务都分配有一个优先级编号, init 会按优先级顺序启动服务。如果需要确保网络连接后启动服务,则必须手动为服务分配更高的优先级。这必须由某人(通常是软件包维护者)针对计算机上运行的每项服务来完成。

所有 System V 初始化脚本都存储在/etc/rc.d/init.d/或/etc/init.d 目录中。这些脚本用于控制系统的启动和关闭。通常,您会在这个目录找到启动 ssh 服务器或网络的脚本,使用/etc/init.d/S50sshdstart 开启某个服务或者使用/etc/init.d/S50sshd stop 关闭某个服务。

在sysV中,所有的服务脚本都放在/etc/rc.d/init.d/中,可以使用/etc/rc.d/init.d/daemon [start|stop|restart|reload|status]方式来管理服务,默认的运行级别在/etc/inittab文件中定义,当系统以某个运行级别启动时,会运行/etc/rc.d/rcN.d/(其中N范围为0~ 6)目录中所有的脚本,而这些脚本的命名都是Knnxxxxx或Snnxxxxx,其中S表示系统启动时调用,K表示系统终止时调用,nn是00~99的数字,数字的大小决定了脚本运行的顺序,最后的xxxxx为脚本的名称(长度任意),这些目录里的文件都是指向init.d目录中脚本的软连接,因为各个运行级别的所需的服务可能存在交集,所以这样能节省硬盘使用空间。

在sysV中,服务被分成两大类,一类是可独立运行的服务,另一类是受xinetd管理的服务,而xinetd本身是一个独立运行的服务,用来负责管理一些不常用的服务,当这些服务需要被使用时,由xinetd来唤醒它们,当服务使用完后,这些服务会被结束以减少系统资源的占用。

什么是 systemd 守护进程?

systemd 这一名字源于 Unix 中的一个惯例:在 Unix 中常以“d” 作为系统守护进程(英语: daemon,亦称后台进程)的后缀标识。除此以外, systemd 亦是借代英文术语 D 体系,而这一术语即是用于描述一个人具有快速地适应环境并解决困难的能力。
systemd 是 Linux 电脑操作系统之下的一套中央化系统及设置管理程序( init),包括有守护进程、程序库以及应用软件,由 Lennart Poettering 带头开发。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动, 同时达到降低 Shell 的系统开销的效果,最终代替现在常用的 System V 与 BSD 风格 init 程序。 目前绝大多数的 Linux 发行版都已采用 systemd 代替原来的System V。

在systemd中,所有的服务脚本都称为unit,主要分成6类:.service, .socket, .target, .path, snapshot, .timer,它们都存放在/usr/lib/systemd/system/目录中。

在systemd中,统一采用systemctl命令来管理所有的服务,主要用法:

systemctl [start|stop|restart|reload|status|is-active|is-enable|enable|disable|mask|umask] 服务名.类型 (当服务为servce类型时可以省略类型,如atd.service可以简写为atd,其他的类型不能省略,如talnet.socket)

systemclt set-default|get-default|isolate xxxxx.target 设置默认运行级别|获取当前的默认运行级别|不重启切换当前环境 (什么是环境呢,target类型的服务都为环境,当运行或切换(需要使用isolate而不能使用start)一个环境时往往会伴随着启动很多其他的服务用以支持这个环境,最常见的环境就是字符界面和图形界面,比如想从现在的字符界面临时切换到图形界面,使用systemctl isolate graphical.tatget)

在systemd中,运行级别由/etc/systemd/system/default.target定义,这个文件本身是一个软连接,如果它指向graphical.targer那么默认的运行级别就是图形界面。

在这里插入图片描述

参考链接:
《嵌入式linux应用开发完全手册》–韦东山
Linux’s init system & systemd
对systemV和systemd的简单理解(服务方面)
Systemd 入门教程:命令篇
Systemd 入门教程:实战篇

Logo

更多推荐