linux下init机制与systemd管理机制

简介: linux下init机制与systemd管理机制


1、 Linux初始化init系统

 

Linux操作系统的启动首先从BIOS开始,接下来Linux引导程序将内核映像加载到内存,进行内核初始化,内核初始化的最后一步就是启动PID为1的init进程。这个进程是系统的第一个进程,它负责产生其它所有用户进程。

仅仅将内核运行起来是毫无用途的,因此就需要一个系统能够定义、管理和控制init进程的行为,并负责组织和运行许多独立的或相关的初始化工作,从而让系统进入一个用户设定的运行模式中,这个系统就是init系统。

 

大多数Linux发行版的init系统是和System V相兼容的,因此被称为sysvinit,这是最早也是最流行的init系统,在RHEL7.x/Centos7.x发行版本之前的系统中都采用sysvinit,sysvinit概念简单清晰,主要依赖于Shell脚本,但它一次一个串行地启动进程,决定了它的最大弱点:启动太慢。虽然在服务器上这个缺点不算什么,但是当Linux被应用到移动终端设备上时,这个缺点就变成了大问题。为了能更快的启动系统,开发者们对sysvinit进行了不断的改进,先后出现了upstart和systemd这两个主要的新一代init系统,以Ubuntu为代表的Linux发行版就采用的是upstart方式,而在RHEL7.x/Centos7.x版本中,已经默认开始采用systemd来管理系统。Upstart出现很早,而systemd出现较晚,但发展更快,大有取代upstart的趋势。

 

 

2、runlevel到target的改变

 

sysvinit用术语“runlevel”来定义系统运行级别,在RHEL7.x/Centos7.x版本之前的系统中,通常有7种运行级别,每个Linux发行版对运行级别的定义都不太一样。但0、1、6三个级别却获得了共识,含义如下:

Ø0-关机模式。

Ø1-单用户模式:单用户只有系统管理员可以登录。

Ø6-重启模式:也就是执行关闭所有运行的进程,然后重新启动系统。

另外4个运行级别,RHEL/Centos发行版定义的含义为:

Ø2-多用户模式:不支持文件共享,例如不支持NFS服务。这种模式不常用。

Ø3-完全的多用户模式:支持NFS服务。这是最常用的用户模式,默认登录到系统的字符界面。

Ø4-基本不用的用户模式:可以实现某些特定的登录请求。

Ø5-完全多用户模式:默认登录到X-window系统,也就是登录到Linux图形界面。

 

这些运行级别和Linux中的init程序相互对应,例如执行“init 1”命令系统就进入单用户模式,执行“init 6”命令系统将重新启动。

 

在RHEL7.x/Centos7.x以后版本中,默认采用了systemd来管理系统。systemd是新一代init系统,它的主要特点是并发处理所有服务,加速开机流程。由此,以前的运行级别(runlevel)的概念被新的运行目标(target)所取代,tartget的命名类似于“multi-user.target”这种形式,比如原来的运行级别3(runlevel3)对应于新的多用户目标“multi-user.target”,运行级别5(runlevel5)就对应于“graphical.target”。由于systemd机制中不再使用runlevle的概念,所以/etc/inittab也不再被系统使用。

在新的systemd管理体系里,默认的target(相当于以前的默认运行级别)是通过软链来实现。

例如,要查看系统的默认target,可以执行如下图所示命令:

 

要查看运行级与target的对应关系,可以执行“ll /lib/systemd/system/runlevel*.target”命令


 

3、init机制的特点与服务管理方式

 

init管理机制下,所有的服务启动脚本都放置于/etc/init.d/目录,基本上都是使用bash shell所写成的脚本程序,需要启动、关闭、重新启动、查看状态时,可以通过如下的方式来处理:

启动:/etc/init.d/daemon start

关闭:/etc/init.d/daemon stop

重启:/etc/init.d/daemon restart

查看状态:/etc/init.d/daemon status

而要设置服务是否自动运行,可通过如下方法:

设置服务自启动: chkconfig daemon on

关闭服务自启动: chkconfig daemon off

查看服务是否自启动: chkconfig --list daemon

 

 

4、systemd机制下的服务管理方式

 

systemd在系统中是一个用户级的应用程序,它包含了一个完整的软件包,配置文件位于/etc/systemd这个目录下,所有服务脚本位于/usr/lib/systemd/system目录下,这些脚本都已.service结尾。

 

systemd提供了一个非常强大的命令行工具systemctl,可能很多系统运维人员都已经非常熟悉service、chkconfig命令,而systemd也能完成同样的管理任务,可以把systemctl看作是service和chkconfig的组合体。要查看、启动、停止、重启、启用或者禁用系统服务,都可以通过systemctl命令来实现。为了向后兼容,旧的service命令在Centos7.x以后版本中仍然可用,不过它会重定向所有命令到新的systemctl工具。

 

(1)、启动、停止、重启服务

[root@centos8 systemd]#  systemctl start httpd.service

[root@centos8 systemd]#  systemctl stop httpd.service

[root@centos8 systemd]# systemctl  restart  httpd.service

[root@centos8 systemd]# systemctl  try-restart  httpd.service

[root@centos8 systemd]# systemctl  reload httpd.service

 

(2)、查看、禁止、启用服务

通过systemctl命令可以实现启用、禁用服务,以此来控制开机服务启动,可以使用enable/disable选项来控制一个服务是否开机启动,命令如下:

[root@centos8 systemd]# systemctl enable httpd.service

这就打开了httpd服务开机自启动功能。要关闭httpd服务,可执行如下命令:

[root@centos8 systemd]# systemctl disable httpd.service


相关文章
|
1月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制
本文深入探讨了Linux操作系统中用于管理多线程和进程的并发控制的关键技术,包括原子操作、锁机制、自旋锁、互斥量以及信号量。通过详细分析这些技术的原理和应用,旨在为读者提供一个关于如何有效利用Linux内核提供的并发控制工具以优化系统性能和稳定性的综合视角。
|
11天前
|
存储 编译器 Linux
动态链接的魔法:Linux下动态链接库机制探讨
本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。
152 17
|
19天前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
23天前
|
消息中间件 安全 Linux
深入探索Linux操作系统的内核机制
本文旨在为读者提供一个关于Linux操作系统内核机制的全面解析。通过探讨Linux内核的设计哲学、核心组件、以及其如何高效地管理硬件资源和系统操作,本文揭示了Linux之所以成为众多开发者和组织首选操作系统的原因。不同于常规摘要,此处我们不涉及具体代码或技术细节,而是从宏观的角度审视Linux内核的架构和功能,为对Linux感兴趣的读者提供一个高层次的理解框架。
|
1月前
|
算法 Linux 开发者
Linux内核中的锁机制:保障并发控制的艺术####
本文深入探讨了Linux操作系统内核中实现的多种锁机制,包括自旋锁、互斥锁、读写锁等,旨在揭示这些同步原语如何高效地解决资源竞争问题,保证系统的稳定性和性能。通过分析不同锁机制的工作原理及应用场景,本文为开发者提供了在高并发环境下进行有效并发控制的实用指南。 ####
|
1月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
42 5
|
1月前
|
Linux 数据库
Linux内核中的锁机制:保障并发操作的数据一致性####
【10月更文挑战第29天】 在多线程编程中,确保数据一致性和防止竞争条件是至关重要的。本文将深入探讨Linux操作系统中实现的几种关键锁机制,包括自旋锁、互斥锁和读写锁等。通过分析这些锁的设计原理和使用场景,帮助读者理解如何在实际应用中选择合适的锁机制以优化系统性能和稳定性。 ####
61 6
|
1月前
|
消息中间件 存储 Linux
|
1月前
|
安全 Linux 数据安全/隐私保护
深入探索Linux操作系统的多用户管理机制
【10月更文挑战第21天】 本文将详细解析Linux操作系统中的多用户管理机制,包括用户账户的创建与管理、权限控制以及用户组的概念和应用。通过具体实例和命令操作,帮助读者理解并掌握Linux在多用户环境下如何实现有效的资源分配和安全管理。
|
4月前
|
存储 缓存 编译器
Linux源码阅读笔记06-RCU机制和内存优化屏障
Linux源码阅读笔记06-RCU机制和内存优化屏障