Linux系统启动流程及服务管理控制
系统启动与服务管理
系统启动
1.BIOS(Basic Input Output System基本输入输出系统)加电自检、检测硬件、决定启动介质、找到引导扇区。
2.读取并且执行第一个开机设备中的MBR(Master Boot Record主引导记录)的bootloader(grub程序:Grand unified bootloader大统一启动加载器)
3.依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序
boot loader主要功能如下:
提供选单:用户可以选择不同的开机项目 载入核心文件:直接指向可开机的程序区域来开始操作系统 转交其他loader:将开机管理功能转交给其他Loader负责
内核在Linux中的存放位置为/boot分区下,主要有2个文件要被加载:
vmlinuz-3.10.0-514.el7.x86_64 内核文件 initramfs-3.10.0-514.el7.x86_64.img 虚拟文件系统
可以使用lsinitrd命令查看虚拟文件系统。
GRUB2相较于GRUB一代的提升:更健壮、可移植、更强大。支持BIOS、EFI和OpenFirmware,支持GPT和MBR分区表。支持非Linux系统,如苹果HFS文件系统和Windows的NTFS文件系统。
如果是sysvinit启动程序(linux6版本)
4.内核启动init进程 5.系统初始化 6.init找到/etc/inittab文件,决定系统的运行级别(X) 7.触发相应的运行级别的事件,运行/etc/rcX.d下的脚本 8.执行/etc/rc.local文件,来到登录界面 9.输入用户名密码,进入到系统中
如果是systemd启动程序(Linux7版本)
4.在硬件驱动加载成功后,内核会主动呼叫systemd程序,并以default.target流程开机 5.systemd执行sysinit.target初始化系统及basic.target准备操作系统 6.systemd启动multi-user.target下的本机与服务器服务 7.systemd执行multi-user.target下的/etc/rc.d/rc.local文件 8.systemd执行multi-user.target下的getty.target及登录服务 9.systemd执行graphical需要的服务
Init和Systemd的区别
systemd是linux系统中最新的初始化系统(init),它主要的设计目标是克服sysvinit固有的缺点,提高系统的启动速度。
Init
1.启动时间长,init是串行启动,只有前一个进程启动完才会启动下一个进程; 2.启动脚本复杂,init进程只是执行启动脚本,不管其他事情,脚本需要自己处理各种情况,这往往使得脚本变得很长; 3.由Linux内核加载运行,位于/sbin/init,是系统中第一个进程,PID永远为1。
对于支持service的程序,安装的时候会自动的在/etc/init.d目录添加一个配置文件。当我们使用service控制程序时,比如执行开启httpd的服务:service httpd start。那么我们的service就会开启/etc/init.d/httpd配置文件里面指向的/usr/sbin/httpd可执行文件。
systemd
1.按需启动服务,减少系统资源消耗; 2.尽可能并行启动进程,减少系统启动等待时间; 3.由Linx内核加载运行,位于/usr/lib/systemd/systemd,是系统中第一个进程,PID永远为1。
对于支持systemd的程序,安装的时候会自动的在/usr/lib/systemd/system目录添加一个配置文件。当我们使用systemctl控制该程序时,比如执行开启httpd服务:systemctl start httpd.service。那么我们的systemctl就会开启httpd.service配置里面指向的/usr/sbin/httpd可执行文件。
如果我们想让该程序开机启动,我们可以执行命令systemctl enable httpd,这个命令相当于在/etc/systemd/system目录添加一个软链接,指向/usr/lib/systemd/system目录下的httpd.service文件。这是因为开机时,Systemd只执行/etc/systemd/system目录里面的配置文件。
配置文件的区别:
init进程的配置文件
/etc/init.d/:服务启动脚本配置文件存放目录 /etc/inittab:默认运行级别配置文件 /etc/init/rcS.conf:系统初始化配置文件 /etc/init/rc.conf:各运行级别初始化的配置文件 /etc/init/rcS-sulogin.conf:单用户模式启动/sbin/sushell环境的配置文件 /etc/init/control-altdelete.conf:终端下的ctrl+alt+del热键操作的配置文件 /etc/sysconfig/init:tty终端的配置文件 /etc/init/start-ttys.conf:配置tty终端的开启数量、设备文件 /etc/init/tty.conf或/etc/init/serial.conf:控制tty终端的开启
systemd进程的配置文件
/etc/systemd/system/default.target:取代/etc/inittab文件配置,通常符号链接到/lib/systemd/system/graphical.target /run/systemd/system/:系统执行过程中所产生的服务脚本所在目录 /etc/systemd/system/:里面存放着不同级别的开机自启服务 /usr/lib/systemd/system/和/lib/systemd/system/两个文件完全一样,因为/lib是/usr/lib的软链接:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
运行级别和说明:
0:关机状态,使用该级别将会关机----rehl6/7命令:init 0----rhel命令:poweroff 1:系统救援模式,多用于系统维护----rehl6/7命令:init 1----rhel命令:systemctl isolate rescue.target 2:字符界面的多用户模式(不可访问网络)----rehl6/7命令:init 2----rhel命令:systemctl isolate mutil-user.target 3:字符界面的完整多用户模式,大多数服务器主机运行此级别----rehl6/7命令:init 3----rhel命令:systemctl isolate mutil-user.target 4:未分配使用----rehl6/7命令:init 4----rhel命令:systemctl isolate mutil-user.target 5:图形界面的多用户模式,提供了图形桌面操作环境----rehl6/7命令:init 5----rhel命令:systemctl isolate graphical.target 6:重新启动主机----rehl6/7命令:init 6----rhel命令:reboot
查看运行级别:
runlevel:显示切换前的运行级别和当前运行级别(6/7) systemctl get-default:显示当前运行级别(7)
永久设置开机模式:
systemctl set-default multi-user.target:开机默认为文本模式 systemctl set-default graphical.target:开机默认为图形模式 修改/etc/inittab默认运行级别配置文件
systemd服务管理
Systemd的基本概念
单元(unit)的概念
系统初始化需要做的事情非常多。需要启动后台服务,比如启动SSHD服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被systemd抽象为一个配置单元,即unit。可以认为一个服务是一个配置单元;一个挂载点是一个配置单元;一个交换分区的配置是一个配置单元;等等
Service unit:系统服务,最常见的类型 Target unit:多个Unit构成的一个组,执行环境类型 Device Unit:硬件设备 Mount Unit:文件系统的挂载点 Automount Unit:自动挂载点 Path Unit:侦测特定文件或目录类型的 Scope Unit:不是由Systemd启动的外部进程 Slice Unit:进程组 Snapshot Unit:Systemd快照,可以切回某个快照 Socket Unit:进程间通信的socket服务 Swap Unit:swap文件 Timer Unit:循环执行的服务
Target和运行级别
systemd用目标(target)替代了运行级别的概念,提供了更大的灵活性,比如你可以继承一个已有的目标,并添加其它服务,来创建自己的目标。下表列举了systemd下的目标和常见runlevel的对应关系:
systemctl管理服务
RHEL7监视和控制systemd的主要命令是systemctl,该命令可以用于查看系统状态和管理系统及服务。
常用命令有:
systemctl start <单元>:立即启动单元 systemctl stop <单元>:立即停止单元 systemctl restart <单元>:重启单元 systemctl reload <单元>:重新读取单元配置 systemctl status <单元>:输出单元运行状态 systemctl is-enabled <单元>:检查单元是否配置为自动启动 systemctl enable <单元>:开机自动启动单元 systemctl disable <单元>:取消开机自动激活单元 systemctl is-active <单元>:查看单元是不是正在运行 systemctl is-failed <单元>:查看单元是否处于启动失败状态 systemctl kill <单元>:杀死单元的所有子进程 systemctl daemon-reload:重新载入systemd,扫描新的或有变动的单元
RHEL7的服务systemctl脚本存放在:/usr/lib/systemd/目录,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序存在系统服务里,即:/usr/lib/systemd/system目录下。每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],每个部
分内部是一些等号连接的键值对,注意键值对的等号两侧不能有空格。
[root@localhost ~]# cat /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
[Unit]
[Unit]区块通常是配置文件的第一个区块,用来定义Unit的元数据以及配置与其他Unit的关系。它的主要字段如下:
Description:简短描述 Documentation:文档地址 Requires:当前Unit依赖的其他Unit,如果它们没有运行,当前Unit会启动失败 Wants:与当前Unit配合的其他Unit,如果它们没有运行,当前Unit不会启动失败 BindsTo:与Requires类似,它指定的Unit如果退出,会导致当前Unit停止运行 Before:如果该字段指定的Unit也要启动,那么必须在当前Unit之后启动 After:如果该字段指定的Unit也要启动,那么必须在当前Unit之前启动 Conflicts:这里指定的Unit不能与当前Unit同时运行 Condition...:当前Unit运行必须满足的条件,否则不会运行 Assert...:当前Unit运行必须满足的条件,否则会报启动失败
[Service]
[Service]部分是服务的关键,是服务的一些具体运行参数的设置,只有Service类型的Unit才有这个区块。它的主要字段如下:
Type:定义启动时的进程行为。
它有以下几种值:
Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以fork方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot:一次性进程,Systemd会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕会通知Systemd,再继续往下执行 Type=idle:若有其他任务执行完毕,当前服务才会运行 ExecStart:启动当前服务的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当前服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况Systemd会自动重启当前服务,可能的值包括always(总是重启)、 on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec:定义Systemd停止当前服务之前等待的秒数 Environment:指定环境变量
[Install]
[Install]通常是配置文件的最后一个区块,用来定义如何启动以及是否开机启动。它的主要字段如下:
WantedBy:它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名+.wants后缀构成的子目录中 RequiredBy:它的值是一个或多个Target,当前Unit激活时,符号链接会放入/etc/systemd/system目录下面以Target名+.required后缀构成的子目录中 Alias:当前Unit可用于启动的别名 Also:当前Unit激活(enable)时,会被同时激活的其他Unit
注意: 如果服务没有Install段落,一般意味着应该通过其它服务自动调用它们。
Target
简单来说,Target就是一个Unit组,包含许多相关的Unit。启动某个Target的时候,Systemd就会启动里面所有的Unit。从这个意义上说,Target这个概念类似于"状态点",启动某个Target就好比启动到某种状态。
传统的init启动模式里面有RunLevel的概念,跟Target的作用很类似。
不同的是,RunLevel是互斥的,不可能多个RunLevel同时启动,但是多个Target可以同时启动。
//查看当前系统的所有 Target $ systemctl list-unit-files --type=target // 查看一个 Target 包含的所有 Unit $ systemctl list-dependencies multi-user.target //查看启动时的默认 Target $ systemctl get-default //设置启动时的默认 Target $ sudo systemctl set-default multi-user.target //切换 Target 时,默认不关闭前一个 Target 启动的进程, $ systemctl isolate 命令改变这种行为, //关闭前一个 Target 里面所有不属于后一个 Target 的进程 $ sudo systemctl isolate multi-user.target
- Linux系统启动流程及服务控制
- linux 启动流程与文件系统管理
- linux笔记之 开机服务启动的控制,系统日志的查看,防火墙的关闭
- 介绍Linux系统如何初始化和启动系统服务的(Linux的开机流程)
- RHCE课程-RH131Linux管理笔记二-Linux系统启动流程 推荐
- RHCE课程-RH131Linux管理笔记二-Linux系统启动流程
- 禁用开机时弹出窗口“ 服务控制管理器:在系统启动时至少一个服务或驱动程序产生错误”
- Linux系统管理 服务控制
- linux服务的管理方式,使用ntsysv工具管理多个系统服务的启动状态
- RHCE课程-RH131Linux管理笔记二-Linux系统启动流程
- 介绍Linux系统如何初始化和启动系统服务的(Linux的开机流程)
- Linux 用户、目录的作用以、启动流程以及内核服务管理
- Linux系统下的启动流程&运行级别&用户管理
- Linux系统管理——引导过程与服务控制
- Linux系统从开机到正常提供服务的详细开机启动流程
- Linux 系统管理——引导过程与服务控制
- Linux初级运维(十六)——Linux进程管理及系统启动流程
- Linux管理默认系统开机启动服务
- Linux系统启动流程、内核及模块管理
- linux系统管理:引导过程和服务控制(七)