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