深入浅析centos7中的systemd

系统启动流程

POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --> /sbin/init

init:

CentOS 5: SysV init

CentOS 6: Upstart

CentOS 7: Systemd

systemd 

系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。

新特性:

系统引导时实现服务并行启动

按需启动守护进程

自动化的服务依赖关系管理

同时采用socket式与D-Bus总线式激活服务

系统状态快照

核心概念:unit

unit 表示不同类型的systemd对象,通过配置文件进行标识和配置。

文件中主要包含了系统服务、监听socket 、保存的系统快照以及其它与init 相关的信息。

配置文件:

/usr/lib/systemd/system:

每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/run/systemd/system:

系统执行过程中所产生的服务脚本,比/usr/lib/systemd/system目录优先运行

/etc/systemd/system:

管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx 类的功能,比/run/systemd/system目录优先运行

关键特性:

基于socket 的激活机制: socket 与服务程序分离

基于d-bus 的激活机制:

基于device 的激活机制:

基于path 的激活机制:

系统快照: 保存各unit的当前状态信息于持久存储设备中,向后兼容sysv init 脚本

不兼容:

systemctl 命令固定不变,不可扩展

非由systemd 启动的服务,systemctl无法与之通信和控制

Unit 类型

Systemctl –t help 查看unit 类型

Service unit: 文件扩展名为.service, 用于定义系统服务

Target unit: 文件扩展名为.target,用于模拟实现运行级别

Device unit: .device,用于定义内核识别的设备

Mount unit: .mount, 定义文件系统挂载点

Socket unit: .socket, 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动

Snapshot unit: .snapshot, 管理系统快照

Swap unit: .swap, 用于标识swap 设备

Automount unit: .automount ,文件系统的自动挂载点

Path unit: .path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool 目录

服务管理

`centos7几乎一切服务都是由systemctl来管理service unit,centos7之前的service同时仍然兼容。

运行级别

target units:

unit 配置文件:

.target,用于模拟实现运行级别

ls /usr/lib/systemd/system/*.target

systemctl list-unit-files --type target --all

运行级别:

0 ==> runlevel0.target, poweroff.target

1 ==> runlevel1.target, rescue.target

2 ==> runlevel2.target, multi-user.target

3 ==> runlevel3.target, multi-user.target

4 ==> runlevel4.target, multi-user.target

5 ==> runlevel5.target, graphical.target

6 ==> runlevel6.target, reboot.target

查看依赖性:

systemctl list-dependencies graphical.target

级别切换:

init N ==> systemctl isolate name.target

systemctl isolate multi-user.target

注意:只有/lib/systemd/system/*.target 文件中AllowIsolate=yes才能切换,修改文件需执行systemctl daemon-reload 才能生效

查看target:

systemctl list-units --type target

获取默认运行级别:

/etc/inittab ==> systemctl get-default

runlevel

who -r

修改默认级别:

/etc/inittab ==> systemctl set-default name.target

systemctl set-default multi-user.target

ls –l /etc/systemd/system/default.target

切换至紧急救援模式:

相当于init 1

systemctl rescue

切换至emergency 模式:

systemctl emergency

其它常用命令:

传统命令init ,poweroff ,halt ,reboot 都成为 systemctl 的软链接

关机:systemctl halt 、systemctl poweroff

重启:systemctl reboot

挂起:systemctl suspend

休眠: :systemctl hibernate

休眠并挂起:systemctl hybrid-sleep

CentOS7 引导启动顺序

UEFi 或BIOS 初始化,运行POST 开机自检

选择启动设备

引导装载程序, centos7 是grub2

加载装载程序的配置文件:/etc/grub.d/ ,/etc/default/grub ,/boot/grub2/grub.cfg

加载initramfs 驱动模块

加载内核选项

内核初始化,centos7 使用systemd 代替init

执行initrd.target 所有单元,包括挂载/etc/fstab

从initramfs 根文件系统切换到磁盘根目录

systemd执行/etc/systemd/system目录下的配置

systemd 执行默认target 配置,配置文件/etc/systemd/system/default.target

systemd 执行sysinit.target 初始化系统及basic.target 准备操作系统

systemd 启动multi-user.target 下的本机与服务器服务

systemd 执行multi-user.target 下的/etc/rc.d/rc.local

systemd 执行multi-user.target 下的getty.target及登录服务

systemd 执行graphical 需要的服务

service unit 文件格式

/etc/systemd/system :

系统管理员和用户使用

/usr/lib/systemd/system :

发行版打包者使用

相关布尔值

1 、yes 、on 、true 都是开启

0 、no 、off、false 都是关闭

时间单位

默认是秒,所以要用毫秒(ms )分钟(m )等须显式说明

service unit file 文件通常由三部分组成:

[Unit] : 定义与Unit 类型无关的通用选项;用于提供unit 的描述信息、unit 行为及依赖关系等

[Service] : 与特定类型相关的专用选项;此处为Service 类型

[Install] : 定义由“systemctl enable” 以及"systemctl disable“ 命令在实现服务启用或禁用时用到的一些选项

Unit 段的常用选项:

Description : 描述信息

After : 定义unit 的启动次序,表示当前unit 应该晚于哪些unit 启动,其功能与Before 相反

Requires : 依赖到的其它units ,强依赖,被依赖的units 无法激活时,当前unit 也无法激活

Wants : 依赖到的其它units ,弱依赖

Conflicts : 定义units 间的冲突关系

Service 段的常用选项:

Type : 定义影响ExecStart 及相关参数的功能的unit 进程启动类型

simple : 默认值,这个daemon(后台进程)主要由ExecStart所接的指令串来启动,启动后常驻于内存中

forking : 由ExecStart 启动的程序透过spawns(繁衍)延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止

oneshot : 与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中

dbus : 与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作. 因此通常也要同时设定BusNname= 才行

notify : 在启动完成后会发送一个通知消息。还需要配合NotifyAccess来让 Systemd 接收消息

idle : 与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务

EnvironmentFile : 环境配置文件

ExecStart : 指明启动unit要运行命令或脚本的绝对路径

ExecStartPre: ExecStart前运行

ExecStartPost: ExecStart后运行

ExecStop : 指明停止unit要运行的命令或脚本

Restart : 当设定Restart=1时,则当次daemon服务意外终止后,会再次自动启动此服务

Install 段的常用选项:

Alias : 别名,可使用systemctl command Alias.service

RequiredBy : 被哪些units所依赖,强依赖

WantedBy : 被哪些units所依赖,弱依赖

Also : 安装本服务的时候还要安装别的相关服务

注意:

对于新创建的unit文件,或者修改了的unit文件,要通知systemd 重载此配置文件, 可以选择重启

systemctl daemon-reload

示例:

vim /etc/systemd/system/bak.service

[Unit]

Description=backup /etc

Requires=atd.service

[Service]

Type=simple

ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

systemctl start bak

设置内核参数

只影响当次启动

启动时,在linux16 行后添加

systemd.unit=desired.target

systemd.unit=emergency.target

systemd.unit=recure.target

recure.target比emergency支持更多的功能,例如日志等

启动排错

文件系统损坏,先尝试自动修复,失败则进入emergency shell,提示用户修复

在/etc/fstab 不存在对应的设备和UUID等一段时间,如不可用,进入emergency shell

在/etc/fstab 不存在对应挂载点systemd尝试创建挂载点,否则提示进入emergency shell.

在/etc/fstab 不正确的挂载选项提示进入emergency shell

破解CentOS7 的root 口令

方法一

启动时任意键暂停启动

按e 键进入编辑模式

将光标移动linux16 开始的行,添加内核参数rd.break

按ctrl-x 启动

mount –o remount,rw /sysroot

chroot /sysroot

passwd root

touch /.autorelabel

exit

reboot

方法二

启动时任意键暂停启动

按e 键进入编辑模式

将光标移动linux16 开始的行,改为rw init=/sysroot/bin/sh

按ctrl-x 启动

chroot /sysroot

passwd root

touch /.autorelabel

exit

reboot

       修复GRUB2

GRUB “the Grand Unified Bootloader” ”

引导提示时可以使用命令行界面

可从文件系统引导

主要配置文件 /boot/grub2/grub.cfg

修复配置文件

grub2-mkconfig > /boot/grub2/grub.cfg

grub2-mkconfig -o /boot/grub2/grub.cfg

修复grub

grub2-install /dev/sda (BIOS 环境)

grub2-install (UEFI 环境)

调整默认启动内核

vim /etc/default/grub

GRUB_DEFAULT=0

总结

以上所述是小编给大家介绍的centos7中的systemd,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

以上是 深入浅析centos7中的systemd 的全部内容, 来源链接: utcz.com/z/313391.html

回到顶部