目录
一、引导过程总览
1.开机自检
2.MBR引导
3.GRUB菜单
4.加载Linux内核
5.init进程初始化
二、Systemd服务控制
1.systemd服务控制的优势
2.systemd的核心与配置
3.service运行级别
4.设置service运行级别
三、Systemctl 服务常用命令
一、引导过程总览
1.开机自检
检测出第一个能够引导系统的设备,比如硬盘或光驱。
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
2.MBR引导
运行放在MBR扇区里的启动GRUB引导程序
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。
3.GRUB菜单
GRUB引导程序通过读取GRUB配置文件 /boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。
需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
4.加载Linux内核
把内核和镜像文件系统加载到内存中
Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
5.init进程初始化
加载硬件驱动程序,内核把init进程加载到内存中运行
为了完成进一步的系统引导过程,Linux内核首先将系统中的“ /sbin/init ”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户登录。

二、Systemd服务控制
1.systemd服务控制的优势
传统sysv init 依赖于串行执行 Shell 脚本启动服务,导致效率低下,系统启动速度较慢。
systemd 能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。
- 系统引导时实现服务并行启动
- 按需启动守护进程
- 自动化的服务依赖关系管理
-
同时采用socket式与D-Bus总线式激活服务
-
socket与服务程序分离
-
向后兼容sysv init脚本使用systemctl 命令管理,systemctl命令固定不变,
-
不可扩展,非由systemd启动的服务,
-
systemctl无法与之通信和控制
- 系统状态快照
2.systemd的核心与配置
systemd 核心概念:unit
-
unit 表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听 socket、保存的系统快照以及其它与init相关的信息。
-
systemd单元文件最初默认存放在/usr/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
-
systemctl 命令用于管理各种类型的systemd单元。
各种类型的 unit
unit 配置文件存放位置
[root@localhost system]#ls /usr/lib/systemd/system
abrt-ccpp.service dev-hugepages.mount iscsiuio.socket plymouth-quit.service selinux-policy-migrate-local-changes@.service systemd-kexec.service
abrtd.service dev-mqueue.mount kdump.service plymouth-quit-wait.service serial-getty@.service systemd-localed.service
abrt-oops.service dm-event.service kexec.target plymouth-read-write.service shutdown.target systemd-logind.service
abrt-pstoreoops.service dm-event.socket kexec.target.wants plymouth-reboot.service shutdown.target.wants systemd-machined.service
abrt-vmcore.service dmraid-activation.service kmod-static-nodes.service plymouth-start.service sigpwr.target systemd-machine-id-commit.service
abrt-xorg.service dnsmasq.service kpatch.service plymouth-switch-root.service sleep.target systemd-modules-load.service
accounts-daemon.service dracut-cmdline.service ksm.service polkit.service -.slice systemd-nspawn@.service
alsa-restore.service dracut-initqueue.service ksmtuned.service postfix.service slices.target systemd-poweroff.service
alsa-state.service dracut-mount.service libstoragemgmt.service poweroff.target smartcard.target systemd-quotacheck.service
anaconda-direct.service dracut-pre-mount.service libvirtd.service poweroff.target.wants smartd.service systemd-random-se
解读 unit 配置文件
服务控制一般需要编写 service 配置文件(这里以 httpd.service 文件为例)
//定义与Unit类型无关的通用选项;用于提 供unit的描述信息、unit行为及依赖关系等
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
//与特定类型相关的专用选项;此处为 Service类型
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
//定义由“systemctl enable”以及“systemctl disable”命令在实现服务启用或禁用时用到的一些选项
[Install]
WantedBy=multi-user.target
Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系
Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的 unit进程启动类型
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定 restart = 1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务前暂停多长时间,默认值是100毫秒(100ms)。如果未指定时间单位,那么将视为以秒为单位。 例如设为“20”等价于设为“20s”。
PrivateTmp:设定为yes时会再生成/tmp/systemd-private-UUID-NAME.service-XX/tmp/目录
Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启systemctl daemon-reload
3.service运行级别
0 系统停机模式——系统默认运行级别不能设置为0,否则不能正常启动,机器关的;
1 单用户模式——root权限,用于系统维护,禁止远程登录(只能通过实机进去),进入单用户模式的时候root不需要密码就可以登录,所以在此模式下可以修改root密码;
2 多用户模式——没有NFS和网络支持;
3 完整的多用户文本模式——有NFS和网络,登录后进入控制台命令行模式。
4 系统未使用——保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电池用尽时,可以切换到这个模式来做一些设置;
5 图形化模式,登录后进入图形GUI模式,X windows系;
6 重启模式,默认运行级别不能设为6,否则不能正常启动;运行init6机器就会重启。

各个级别的作用
0(poweroff.target):关机
1(rescue.target):单用户模式
2、3、4(mulit-user.target):多用的文本界面
5(graphical.target):多用的图形界面
6(reboot.target):重启
4.设置service运行级别
[root@localhost system]# systemctl [选项] [运行级别unit.target]
get-default 取得当前的target
set-default 设置指定的target为默认的运行级别
isolate 在不重启情况下切换到指定的运行级别
[root@localhost system]# init [1-6] 重启切换到指定的运行级别
//查看当前运行级别
[root@localhost ~]#systemctl get-default
graphical.target
//切换运行级别为3 multi-user.target
[root@localhost ~]#systemctl isolate multi-user.target
//设置默认运行级别为5 graphical.target
[root@localhost ~]#systemctl set-default multi-user.target
三、Systemctl 服务常用命令
效果 |
命令 |
启动服务 |
systemctl start xxx.service |
停止服务 |
systemctl stop xxx.service |
重启服务 |
systemctl restart xxx.service |
重载服务 |
systemctl reload xxx.service |
使某服务开机自启 |
systemctl enable xxx.service |
查看服务是否开机自启 |
systemctl is-enable xxx.service |
使某服务开机不自启 |
systemctl disable xxx.service |
检查服务状态(服务详细信息) |
systemctl status xxx.service |
显示所有已启动的服务 |
systemctl list-units --type=service |