系统启动流程

	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的更多相关文章

  1. centos7的systemd命令对比

    centos7的systemd命令对比 http://www.linuxidc.com/Linux/2014-09/106490p2.htmhttp://www.linuxidc.com/Linux/ ...

  2. centos7上systemd详解

    centos7上systemd详解  发表于 2016-06-07 |  分类于 linux CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往 ...

  3. centos7 使用systemd 自定义关机前脚本

    systemd (centos7) 需求,关机前执行脚本 关机脚本vi /usr/bin/shutdown_cust.sh#!/bin/bashecho "zhengchangguanji& ...

  4. CentOs7下systemd管理知识要点

    centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/system ...

  5. Centos7之Systemd风格

    Unit(单元) /usr/lib/systemd/system       每个服务最主要的启动脚本设置,类似于之前的/etc/init.d目录 关键特性 1.基于socket的激活机制,socke ...

  6. CentOS7 通过systemd 添加开机重启服务

    现在越来越多的环境采用 CentOS 7 作为基础配置,特别是 Hadoop生态 如果要测试或部署环境需要启动很多组件(zookeeper.kafka.redis等等),如下内容是在操作系统层实现开机 ...

  7. Centos7.2 Systemd 方式编译 Mysql5.7.11

    导读 MySQL 5.7 版本的发布,也就是说从现在开始5.7已经可以在生产环境中使用,有任何问题官方都将立刻修复. MySQL 5.7主要特性: 原生支持Systemd 更好的性能:对于多核CPU. ...

  8. Centos7之Systemd(Service文件)详解

    一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下面的命令(以httpd. ...

  9. centos7 系统管理systemd学习记录

    在centos7之前,系统服务是service,chkconfig等命令来管理的.到了centos7,统一使用systemctl来管理系统服务 其实就是把chkconfig和service结合在一起了 ...

随机推荐

  1. 关于meta标签的使用,属性的说明

    原文转自:http://blog.csdn.net/gavid0124/article/details/46826127 网页源代码中有时候会遇到这样的一段代码: <metaname=" ...

  2. HDU 5025 状态压缩蛇+bfs+dp

    题目大意:孙悟空要找到一条花费时间最短的路径,路上为S的代表有蛇,经过需多花一分钟,其他情况下都是走过花费一分钟,但数字必须依次得到,最后到了唐僧处,可以经过也可以救出,救出前提是得到所有种类的钥匙 ...

  3. Git push时报错 ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to......

    今天在使用Git回退到之前某个版本的代码时,进行push时出现如下错误: ! [remote rejected] master -> master (pre-receive hook decli ...

  4. MongoDB环境搭建教程收集(待实践)

    先收集,后续再实践. https://my.oschina.net/leezhen/blog/207262 http://www.360doc.com/content/11/0708/09/26606 ...

  5. JSP的异常处理

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/exception-handling.html: 当写JSP代码的时候,有可能会留下一个编码错误,并且它会 ...

  6. 【CV论文阅读】Deep Linear Discriminative Analysis, ICLR, 2016

    DeepLDA 并不是把LDA模型整合到了Deep Network,而是利用LDA来指导模型的训练.从实验结果来看,使用DeepLDA模型最后投影的特征也是很discriminative 的,但是很遗 ...

  7. 网络最大流增广路模板(EK &amp; Dinic)

    EK算法: int fir[maxn]; int u[maxm],v[maxm],cap[maxm],flow[maxm],nex[maxm]; int e_max; int p[maxn],q[ma ...

  8. 【Record】ART:Android RunTime

    资料来自url=9xdxrhR45Uj3p450JQvTUO-dmzcWswNmABVgYAaFS0AXYDi8Q2JOzvu7y33GIOAI_8Lz7JmLrl0x6DoRW8e5oa" ...

  9. EXCEL单元格的获取——多例模式

    因为Excel的单元格的行列与单元格是一一相应的,行与列组成的是一对联合主键.给定一个单元格行列或者给定一个单元格名称.须要找到相应的单元格:这样就形成了一种映射关系.须要使用单例模式的变式--多例模 ...

  10. Django打造大型企业官网(八)

    4.16.侧边栏标题和广告位布局完成 templates/news/index.html <div class="sidebar-wrapper"> <div c ...