其他分享
首页 > 其他分享> > C6 C7的开机启动流程

C6 C7的开机启动流程

作者:互联网

C6开机启动流程

1.内核引导,加电自检(通电后检查内核):检查bios的配置,检测硬件
装好系统之后才会进行以下内容

MBR 引导 (3.2.1...)

GRUB菜单 (选择不同的系统)(按e,进入单用户模式)

c6改密码很简单,可以直接改
2.运行init

c6:
查看当前运行的级别,c6,c7都可以使用runlevel查看运行级别

[root@oldboy ~]# vim /etc/inittab # 可以看到左下角的运行级别


[root@zls ~]# runlevel  上一次的运行级别和现在的级别
N 3
临时切换运行级别

[root@zls ~]# init 5   切换,没有图形化界面则不会切换
[root@zls ~]# runlevel
3 5

永久切换运行级别
[root@zls ~]# vim /etc/inittab
id:3:initdefault

c7:
[root@oldboy ~]# vim /etc/inittab

# inittab is no longer used when using systemd.
 使用systemd时不再使用inittab。
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
 在此处添加配置不会对您的系统产生任何影响。
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
 Ctrl Alt Delete由/usr/lib/systemd/system/Ctrl-Alt-del.target处理
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
 systemd使用“targets”而不是runlevels。默认情况下,有两个主要目标:
# multi-user.target: analogous to runlevel 3
multi-user.target:类似于runlevel 3
# graphical.target: analogous to runlevel 5
 graphical.target:类似于runlevel 5
# To view current default target, run:
要查看当前默认目标,请运行:
# systemctl get-default
#
# To set a default target, run:
要设置默认目标,请运行:
# systemctl set-default TARGET.target

[root@oldboy ~]# systemctl set-default multi-user.target   # 永久
=init 3:多用户模式(命令行,默认模式)(纯命令行模式)

[root@oldboy ~]# ll /usr/lib/systemd/system/|grep '.target$'
-rw-r--r--. 1 root root  402 Aug  8  2019 shutdown.target    0
-rw-r--r--. 1 root root  486 Aug  8  2019 rescue.target      1
-rw-r--r--. 1 root root  492 Aug  8  2019 multi-user.target  234
-rw-r--r--. 1 root root  558 Aug  8  2019 graphical.target   5
-rw-r--r--. 1 root root  552 Aug  8  2019 poweroff.target    6

3.系统初始化(启动相关服务)
在init的配置文件中(/etc/inittab)有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

l5:5:wait:/etc/rc.d/rc 5

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。

而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。

/etc/rcn.d 下面以S开头的 (软连接)是开机启动的服务的顺序,以K开头的是停止(开机不启动)的服务

# c6可以使用以下命令,c7不能使用(add,可以使用runlevel)(可以使用chkconfig --list,废物)

chkconfig --list      列出所有的系统服务 # c6c7都可以使用

chkconfig --add httpd 增加httpd服务 # 先添加,后选择级别

chkconfig --del httpd 删除httpd服务

chkconfig命令提供了一种简单的方式来设置一个服务的运行级别。例如,为了设置MySQL服务器在运行级别3和4上运行,# 你必须首先将MySQL添加为受chkconfig管理的服务:

chkconfig --add mysql

现在,我们在级别3和5上设定服务为“on”

chkconfig --level 35 mysql on   # 纯命令模式和图形化模式
或
chkconfig mysql on   # 默认是3 上 on ,开机--/etc/inittab--/rc.sysinit--/etc/rcN.d  然后按有没有,按顺序(按链接)进行启动服务

在其他级别上设为off

chkconfig --level 01246 mysql off

为了确认你的配置被正确的修改了,我们可以列出服务将会运行的运行级别,如下所示:

#chkconfig --list mysql  

mysql           0:off       1:off       2:off       3:on 4:off       5:on 6:off

-------------------------

[root@oldboy ~]# ll /etc/systemd/system/multi-user.target.wants/  查看开机自启动服务
[root@oldboy ~]# chkconfig --level 35 nginx on
lrwxrwxrwx  1 root root 37 Apr 25 08:49 nginx.service -> /usr/lib/systemd/system/nginx.service  系统自动创建了软连接(开机自启动)

-----------------------

# c7  添加服务到开机自启动 (这个时候源码nginx要 可以使用systemctl,也就是说运行过那个脚本,如果脚本里面指定有创建/usr/lib/systemd/system/nginx.service脚本并写入了,启动信息就可以!)
systemctl enable 服务名
[root@oldboy ~]# systemctl enable nginx  (状态改变,才会输出)
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
创建了从/etc/systemd/system/multi-user.target.want/nginx.service到/usr/lib/systemd/system/nginx.service的符号链接。(# 前提的nginx.service存在)

[root@oldboy ~]# reboot 
[root@oldboy ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server  (绿色,开机自启动了)
[root@oldboy ~]# chkconfig --list  这个时候用这个命令是看不到nginx开机启动服务的

# 使用软连接让服务加入开机自启动
[root@oldboy ~]# ll /usr/lib/systemd/system/
-rw-r--r--  1 root root  635 Apr 24 08:26 nginx.service
[root@oldboy ~]# ll /etc/systemd/system
drwxr-xr-x. 2 root root   87 Apr 18 22:09 default.target.wants

ln -s /usr/lib/systemd/system/nginx.service  /etc/systemd/system/multi-user.target.wants/nginx.service

[root@oldboy ~]# ll /etc/systemd/system/multi-user.target.wants
total 0
lrwxrwxrwx. 1 root root 38 Apr 18 22:10 auditd.service -> /usr/lib/systemd/system/auditd.service

4.建立终端(tty)
tty1~6,是centos系统(init服务)默认创建的6个终端,是内核需要用到的终端,(可以在命令行使用 init N 实现终端之间的切换)

pts/0 , pts/1 xshell远程连接的终端

启动mingetty 进程

5.用户登录

一般来说,用户的登录方式有三种:

(1)命令行登录(虚拟机)
(2)ssh登录
(3)图形界面登录

## 关机命令
init 0            立马关机
halt              立马关机
shutdown -h now   立马关机
shutdown -h 20:20
shutdown -h +10
shutdown -a       取消关机设置
poweroff          立马关机

## 重启命令
init 6
reboot
shutdown -r now
shutdonw -r 20:20
shutdown -r +10

C7

1.BIOS(开机自检)

打开系统电源后,它将读取所有设备设置并执行开机自检(开机自检)过程,以识别硬件设备,以测试和初始化系统硬件组件。成功后处理后,它将加载MBR(主引导记录)以进行下一个引导处理。

2.MBR ( Master Boot Record 主引导记录)

主引导记录放在Linux引导硬盘的第一个扇区中,MBR的大小只有512个字节,它包含用于引导操作系统的机器代码指令,称为引导加载程序,以及分区表

3.GRUB2 Bootloader(引导菜单)

言简意赅:grub2菜单,如果装了双系统会让你进行选择

grub2配置文件位于/boot/grub2/grub.cfg中,由grub2 mkconfig使用/etc/grub.d中的模板和/etc/default/grub中的设置自动生成。不建议编辑GRUB2配置文件

4.Kernel(内核引导)

Linux内核是操作系统的核心,它是系统上第一个加载的程序。当系统启动时,内核从initrd.img加载所有必要的内核模块和驱动器,以加载Linux7中的系统第一个进程systemd,在6里面,init是爸爸,在7里面换了个爸爸,那就是systemd

**

 [root@oldboy ~]# top
 1 root      20   0  125324   3852   2608 S  0.0  0.4   0:02.38 systemd 
 
 [root@oldboy ~]# ll /etc/init.d/ 只能用绝对路径的方式启动/etc/init.d/下的2个服务,所以centos7里面,大多数服务都是用systemctl这个命令 启动
total 40
-rw-r--r--. 1 root root 18281 Mar 29  2019 functions
-rwxr-xr-x. 1 root root  4569 Mar 29  2019 netconsole
-rwxr-xr-x. 1 root root  7923 Mar 29  2019 network
-rw-r--r--. 1 root root  1160 Aug  8  2019 README
 
#centos7上使用centos6的命令:
[root@oldboy ~]# /etc/init.d/network restart
Restarting network (via systemctl):                        [  OK  ]
[root@oldboy ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]

[root@oldboy ~]# vim a.sh     判断/syy 是否存在
#!/bin/bash
. /etc/init.d/functions

if [ -d /root/syy ];then
        action '该目录已存在' /bin/true
else
        action '该目录不存在' /bin/false
fi
[root@oldboy ~]# sh a.sh 
该目录已存在                                               [  OK  ]

5.Systemd (不再使用init,改成了systemd)
systemd使用“targets”而不是runlevels。默认情况下,有两个主要级别:

1) multi-user(多用户).target: analogous to runlevel 3
#查看运行级别
[root@zls ~]# systemctl get-default
multi-user.target
2) graphical(图形化).target: analogous to runlevel 5
#设置默认运行级别
[root@zls ~]# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.

#查看默认界面
[root@zls ~]# systemctl get-default
graphical.target

[root@zls ~]# vim /etc/inittab
# inittab is no longer used when using systemd.
 使用systemd时不再使用inittab
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
 在此处添加配置不会对您的系统产生任何影响
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
 Ctrl Alt Delete由/usr/lib/systemd/system/Ctrl-Alt-del.target处理
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
 systemd使用“targets”而不是runlevels。默认情况下,有两个主要目标:
# multi-user.target: analogous to runlevel 3
multi-user.target:类似于runlevel 3
# graphical.target: analogous to runlevel 5
graphical.target:类似于runlevel 5
# To view current default target, run:
要查看当前默认目标,请运行
# systemctl get-default
#
# To set a default target, run:
要设置默认目标,请运行:
# systemctl set-default TARGET.target

CentOS7中的运行级别:(runlevel:运行级别的意思)
# init              0~6

runlevel0.target -> poweroff.target    # 关机

runlevel1.target -> rescue.target      # 单用户模式 (救援模式)


runlevel2.target -> multi-user.target  # 多 (没有文件系统和网络)

runlevel3.target -> multi-user.target  # 多 (命令行,默认模式)(纯命令行模式)

runlevel4.target -> multi-user.target  # 多


runlevel5.target -> graphical.target   # 图形化模式

runlevel6.target -> reboot.target      # 重启
(234一样)

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户运行级别(没有文件系统)
运行级别3:完全的多用户状态(有文件系统),登陆后进入控制台命令行模式
运行级别4:多用户运行级别
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

6.Runlevel-Target (运行级别)
运行级别:

init 0.target -> poweroff.target		# 关机
init 1.target -> rescue.target			# 单用户模式
init 2.target -> multi-user.target		# 多用户模式(没有文件系统和网络)
init 3.target -> multi-user.target		# 多用户模式(命令行模式,默认模式)
init 4.target -> multi-user.target		# 多用户模式(还是没有被使用)		
init 5.target -> graphical.target		# 图形化模式
init 6.target -> reboot.target			# 重启
(234一样)

# 获取当前默认的运行级别
[root@qls ~]# systemctl get-default
multi-user.target

# 修改运行级别
[root@qls ~]# systemctl set-default poweroff  (可以分开成两条命令,手动设置)

[root@oldboy ~]# ll /etc/systemd/system/
lrwxrwxrwx. 1 root root  37 Apr 18 22:12 default.target -> /lib/systemd/system/multi-user.target
[root@oldboy ~]# ll /usr/lib/systemd/system/  
lrwxrwxrwx. 1 root root   16 Apr 18 22:09 default.target -> graphical.target# 不管
-rw-r--r--. 1 root root  552 Aug  8  2019 poweroff.target
-rw-r--r--. 1 root root  486 Aug  8  2019 rescue.target
-rw-r--r--. 1 root root  492 Aug  8  2019 multi-user.target
-rw-r--r--. 1 root root  558 Aug  8  2019 graphical.target
-rw-r--r--. 1 root root  543 Aug  8  2019 reboot.target
[root@oldboy ~]# ll /usr/lib/systemd/system/|grep '^l'
lrwxrwxrwx. 1 root root   15 Apr 18 22:09 runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root   13 Apr 18 22:09 runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root   17 Apr 18 22:09 runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root   17 Apr 18 22:09 runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root   17 Apr 18 22:09 runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root   16 Apr 18 22:09 runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root   13 Apr 18 22:09 runlevel6.target -> reboot.target
c7看 /etc/systemd/system/default.target 链接关系找 对应的运行级别,/usr/lib/systemd/system/multi-user.target,(找运行级别)
#/etc/systemd/system/default.target.wants 目录下的xx.service文件,连接到/usr/lib/systemd/system/xx.service   (找服务)

c6看 配置文件中(/etc/inittab),调用执行了/etc/rc.d/rc.sysinit,然后选择对应的运行级别
rcN.d 实现光速切换系统开机运行服务的级别

## 使用两条命令修改默认运行级别---------运行级别原理
[root@qls ~]# rm -f /etc/systemd/system/default.target
[root@qls ~]# ln -s /usr/lib/systemd/system/poweroff.target /etc/systemd/system/default.target


## 相关目录
[root@qls ~]# ll /etc/systemd/system   (默认的运行级别)
[root@qls ~]# ll /usr/lib/systemd/system (运行级别和服务启动 脚本)

CentOS7进入单用户模式

[root@qls ~]# systemctl set-default poweroff

c7进入单用户模式

出现2行内容的时候,按e进入单用户模式,q退出来,回车进入系统,

linux16这一行UTF-8后面输入enforcing=0 init=/bin/bash (顺序不重要)

可以手动修改ro 为 rw ,(这样可以使用systemctl了)

ctrl + x 真正进入单用户模式

## 修改默认启动方式
bash-4.2# mount -o rw,remount /        重新挂载根目录(英文逗号)(改成读写权限)
bash-4.2# systectl set-default multi-user.target    (不能用systemctl)(只能分开执行)
bash-4.2# rm -f /etc/systemd/system/default.target
bash-4.2# ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
bash-4.2# exec /sbin/init              重新引导init后可以使用systemctl

## 修改密码
bash-4.2# mount -o rw,remount /
bash-4.2# echo 123|passwd --stdin root
bash-4.2# exec /sbin/init

进入正经模式,要重新修改密码

方法2:

linux16这一行UTF-8后面输入 rd.break (这种方法只能修改启动级别,不能修改密码,无论的交互还是非交换,有的系统可以改)

switch_root:/# mount -o rw,remount /sysroot  重新挂载/sysroot
switch_root:/# chroot /sysroot  获取root权限,命令提示符改变
sh-4.2# systemctl set-default multi-user.target  可以使用systemctl
sh-4.2# exit            退出
switch_root:/# reboot   重启

[root@qls ~]# systemctl set-default poweroff

c7进入单用户模式

按e进入单用户模式,q退出来,回车从硬盘进入系统,

linux这一行UTF-8后面输入enforcing=0 init=/bin/bash

linux这一行 ro (只读)改成 rw (可读可写)(这样可以使用systemctl了)

ctrl + x 进入

改就完事了

总结

# 查看默认运行级别
systemctl get-default
runlevel

# 设置默认运行级别
systemctl set-default multi-user.target  ###
rm -f /etc/systemd/system/default.target
ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target

# 设置开机自启动--------------------------------- 开机自启原理
1. systemctl enable nginx  
   systemctl disable nginx   取消服务的开机自启
2. ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
#注意,/usr/lib/systemd/system/下得有nginx.service,也就是运行了ngin-rpm -d指定的那个脚本,执行了那个脚本,/usr/lib/systemd/system/就有有nginx.service
同样,如果服务开机自启,那么,/etc/systemd/system/multi-user.target.wants/下就有nginx.service,
3. /app/nginx/sbin/nginx

总结:(服务的开机自启)
1. 要存在 /usr/lib/systemd/system/服务.service #启动脚本文件
2. 软链接 ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
所以说systemcl enable nginx ,就是做出来一个软链接而已

单用户模式

CentOS7忘记root密码,进入单用户模式

1.重启系统

2.在grub菜单界面,按'e'进入单用户模式

3.方法一:

在linux16内容的行末写enforcing=0 init=/bin/bashCtrl + x正式进入单用户模式

4.重新挂载 /目录,权限设置为可读可写(rw)

mount -o rw,remount /

5.修改root密码

echo 1|passwd --stdin root

6.重新加载systemd

exec /sbin/init
reboot

3.方法二:

在linux16内容的行末写rd.breakCtrl + x开机

4.重新挂载sysroot目录设置可读可写权限(rw)

mount -o rw,remount /sysroot

5.获取root权限

chroot /sysroot

6.设置root密码

echo 123|passwd --stdin root

7.退出sh-4.2

exit

8.重启服务器

reboot
# 进入命令行模式记得再次修改用户密码,不然就不能改用户密码了(一次性??),只能修改运行级别

救援模式

救援模式的作用
-不损坏数据的前提下,修复磁盘(/dev/sda),,,密码,运行级别
-修复grub2菜单(/boot/grub2/grub2.cfg)

1.打开电源进入BIOS
2.选择boot界面,将CD-ROM(光驱),放在第一行(,选择,按 + )
3.按F10保存退出,把CD提到第一位,按f10,这样保存之后,重启系统的话,我们将会从光驱进入系统,这样可以选择是否进入救援模式

同样的,如果在服务器上插入USB(U盘),bios一般也可以扫描到U盘,所以,我们也可以在这里选择是否从U盘进入系统,修复系统。(前提是U盘上有相应的镜像)
4.选择yes

5.进入救援模式

install centos7 就是安装centos7,安装系统也可以达到修复系统的目的,但是会导致数据清空

选择install centos 7 按TAB键可以修改默认网卡名(eth),dell(戴尔服务器)net.ifnames=0 biosdevname=0,如果不是戴尔服务器,net.ifnames=0
选择硬盘启动的话,直接进入系统(常用的那个)
回车

救援模式是通过第二行进入的,单用户模式是通过--从硬盘启动---grub菜单---按e----进入的,

<font color=red>救援模式:1.修复磁盘。2.修复grub菜单,3.修改运行级别,修改密码</font>

<font color=red>单用户模式:1.修改运行级别。2.修改忘记的密码</font>

6.进入救援模式之后,选择(1)继续
输入,随便输入回车  (获取root权限)
输入 chroot /mnt/sysimage(xxx不用输入)

可以修改密码,修改运行级别了

exit

reboot

选择救援模式(3)---救援模式(2)--输入修改后的密码进入系统(修改xshell密码,远程连接),,,当然也可以选择开机进入固件,选择硬盘进入系统(回去解放前)

删根了只有快照可以救

模板机删了不影响克隆机


场景二:损坏MBR(磁盘损坏,无法进入系统),进入救援模式解决

多种方法进入命令行模式



## 损坏MBR
[root@oldboy ~]# ll /dev/sda*
brw-rw---- 1 root disk 8, 0 Apr 24 16:39 /dev/sda  #磁盘
brw-rw---- 1 root disk 8, 1 Apr 24 16:39 /dev/sda1 #分区
brw-rw---- 1 root disk 8, 2 Apr 24 16:39 /dev/sda2
brw-rw---- 1 root disk 8, 3 Apr 24 16:39 /dev/sda3

[root@qls ~]# dd < /dev/zero >/dev/sda bs=1 count=446  (默认单位是b字节)   损坏磁盘的前 512b(小心不是bs=1M count=10 哈哈)
446+0 records in
446+0 records out
446 bytes (446 B) copied, 0.00032064 s, 1.4 MB/s
选救援模式
选从本地硬盘启动 (假装若无其事)
刚刚对磁盘的写入已经损坏了磁盘前512b,无法找到操作系统
遇到这一步的解决方法,1.重装系统(但是数据没了),windows可以用pe,linux不能用pe 

2.

进入救援模式
选第二个,进入救援模式
输入以下内容

sh-4.2# chroot /mnt/sysimage      提权
bash-4.2# grub2-install /dev/sda  修复
bash-4.2# exit					退出
sh-4.2# reboot

修复磁盘扇区成功,可以重新进入系统(数据不变)

选择从本地硬盘启动,进入正常的操作系统(去看看有没有真的修好

## 场景3:误删除GRUB菜单(啥都没了),进入救援模式

```bash
[root@oldboy ~]# ll /boot/
total 91920
-rw-r--r--. 1 root root   152976 Aug  8  2019 config-3.10.0-1062.el7.x86_64
drwxr-xr-x. 3 root root       17 Apr 18 22:09 efi
drwxr-xr-x. 2 root root       27 Apr 18 22:09 grub
drwx------. 5 root root       97 Apr 23 21:41 grub2  #
[root@oldboy ~]# cd /boot/grub2
[root@oldboy grub2]# ll
total 32
-rw-r--r--. 1 root root   84 Apr 18 22:12 device.map
drwxr-xr-x. 2 root root   25 Apr 18 22:12 fonts
-rw-r--r--. 1 root root 4261 Apr 18 22:13 grub.cfg #

[root@qls ~]# rm -fr /boot/grub2/
[root@qls ~]# reboot

从硬盘进入(假装若无其事)

grub2菜单被删除,简单的ll,ls,命令都不能使用

grub2菜单被删除,就肯定进不去单用户模式,单用户模式是进入grub2菜单之后,按e进入的
再次进入救援模式
输入以下内容,看右下角,alt+tab 可以切换窗口

```bash
sh-4.2# chroot /mnt/sysimage     提权
bash-4.2# grub2-install /dev/sda
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg  创建配置文件
bash-4.2# exit
sh-4.2# reboot

选从本地硬盘启动,进入正经系统
可以进入系统了,说明/boot/grub2/grub.cfg已经做好了

如果不想再进入光驱系统了,那么关闭虚拟机,选择打开电源进入固件,进入bios。选择boot

把Hard Drive 提到第一位,f10保存退出,这样重新启动,虚拟机将会直接从本地硬盘进入系统


C6 C7

systemd进程管理

systemd优势

1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...)
2.CentOS7 支持开机并行启动服务,显著提高开机启动效率
3.CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
4.CentOS7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。
5.CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。

什么是systemd

systemd即为system daemon守护进程,为系统的启动和管理提供一套完整的解决方案。

systemd相关的配置文件

/usr/lib/systemd/system #类似C6系统的启动脚本目录/etc/init.d/
/etc/systemd/system/ #类似C6系统的/etc/rc.d/rcN.d/
/etc/systemd/system/multi-user.target.wants/


Linux一直以来都采用init进程作为爸爸,但是init有两个缺点:

1.启动时间长,init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
2.启动脚本复杂,初始化完成后,系统会加载很多脚本,脚本都会处理各自的情况,这回让脚本多而复杂

systemd 相关文件

相关文件 CentOS6 CentOS7
服务启动脚本存放路径 /etc/init.d /usr/lib/systemd/system
开机自启服务存放路径 /etc/rcN.d /etc/systemd/system/N.target.wants
默认运行级别 /etc/inittab /etc/systemd/system/default.target

systemd启动相关命令

system V init CentOS6 systemd CentOS7 作用
/etc/init.d/nginx start systemctl start nginx 启动nginx服务
/etc/init.d/nginx stop systemctl stop nginx 停止nginx服务
/etc/init.d/nginx status systemctl status nginx 查看服务的启动状态
/etc/init.d/nginx restart systemctl restart nginx 重启服务
/etc/init.d/nginx reload systemctl reload nginx 不停止服务,重新加载nginx配置文件
systemctl is-acvite nginx 判断nginx服务是否存活(写脚本用)
systemctl mask nginx 禁止服务运行
systemctl unmask nginx 取消禁止
service nginx start service nginx start 启动nginx服务

service不能TAB,c6c7都可以使用service命令(向下兼容)

restart 停止服务,重新加载nginx配置文件,然后再启动,reload 不停止服务,重新加载nginx配置文件,只有nginx可以使用reload(reload报错就用重启restart试试)

./nginx -t 或者 /app/nginx/sbin/nginx -t 检查nginx配置文件有没有问题,有错误的话就显示错误的位置,不能nginx -t 是因为nginx没有加入到环境变量(PATH)

[root@oldboy ~]# systemctl is-active nginx
unknown
[root@oldboy ~]# systemctl start nginx
[root@oldboy ~]# systemctl is-active nginx
active

[root@oldboy ~]# vim nginx.sh
panduanjieguo=$(systemctl is-active nginx)
if [ $panduanjieguo == 'active' ];then
        echo 'nginx存活'
else
        echo 'nginx不存活'
fi

[root@oldboy ~]# systemctl mask nginx
Created symlink from /etc/systemd/system/nginx.service to /dev/null.
创建了从/etc/systemd/system/linix.service到/dev/null的符号链接。(#软链接)
[root@oldboy ~]# systemctl start nginx
Failed to start nginx.service: Unit is masked.
[root@oldboy ~]# systemctl unmask nginx
Removed symlink /etc/systemd/system/nginx.service.

systemd开机自启动相关命令

C6 C7 作用
chkconfig --list systemctl list-unit-files 查看开机自启的服务
chkconfig nginx on(2345) systemctl enable nginx 加入开机自启动
chkconfig nginx off systemctl disable nginx 关闭开机自启动
chkconfig --list nginx systemctl is-enabled nginx 查看指定服务是否被开机自启
chkconfig --add nginx systemctl daemon-reload 当我们手写脚本时让系统认识
[root@oldboy ~]# chkconfig --list|grep 3:on   #在c6好用

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off

[root@oldboy ~]# systemctl list-unit-files
autovt@.service                               enabled 
blk-availability.service                      disabled
brandbot.service                              static

systemd服务状态

服务状态 状态说明
loaded 服务单元的配置文件已经被处理
active(running) 服务的一个或多个进程在运行中
active(exited) 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出)
active(waiting) 服务已经运行但在等待某个事件
inactive 服务没有在运行
enable 服务设定为开机运行
disabled 服务设定为开机不运行
static 服务不能被设定开机启动,但可以由其他服务启动该服务

标签:systemd,target,etc,C7,system,nginx,开机,root,C6
来源: https://www.cnblogs.com/syy1757528181/p/12813983.html