systemd的作用
早上群上讨论了一下systemd的作用,还导致了一个人的直接退群,出于求知心理,搜索了一些systemd,对此也作出了一些相应的整理;
一、systemd的诞生:
学习嵌入式bootloader与kernel衔接的时候,就入门了init进程;init进程也就是系统的第一个进程,PID号为1;
init进程总所周知的问题是从它开始启动,并从下一个程序开始,都是以一个进程启动另一个进程的方式来进行;这样做的显而易见的缺点就是执行速度慢,没有一整套的系统来管理,并且/ect/目录下的随便一个脚本简直长的发指;关机过程差不多是相反的过程,首先init停止所有服务,最后阶段会卸载文件系统。
所以伟大的程序员开始了自己的创作,systemd也就诞生啦。systemd 几乎完全兼容传统的 SysV init 系统: SysV init 脚本可以作为另一种配置文件格式被识别; 提供与 SysV 兼容的 /dev/initctl 接口; 提供各种 SysV 工具的兼容实现; 依然兼容例如 /etc/fstab 或者 utmp之类传统的 Unix 特性。
systemd现在广泛用于Fedora 21、Ubuntu(Ubuntu 15.04以上)、Centos等linux操作系统上;
二、systemd是什么?
开发Systemd的主要目的就是减少系统引导时间和计算开销。
Systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的init进程,启动过程将交给systemd处理。Systemd的一个核心功能是它同时支持init进程的后开机启动脚本。
Systemd引入了并行启动的概念,它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许不同守护进程之间进行交互。Systemd会创建新进程并为每个进程分配一个控制组(cgroup)。处于不同控制组的进程之间可以通过内核来互相通信。 cgroups 信息由内核负责维护, 并且可以通过 /sys/fs/cgroup/systemd/ 接口进行访问。
当作为系统实例运行时, systemd 将会按照 system.conf 配置文件 以及 system.conf.d 配置目录中的指令工作; 当作为用户实例运行时,systemd 将会按照 user.conf 配置文件 以及 user.conf.d 配置目录中的指令工作。
2.1 单位:
systemd 将各种系统启动和运行相关的对象, 表示为各种不同类型的单元(unit), 并提供了处理不同单元之间依赖关系的能力。
Systemd 的其中一个目标就是简化这些事物之间的相互作用,因此如果你有程序需要在某个挂载点被创建或某个设备被接入后开始运行,Systemd 可以让这一切正常运作起来变得相当容易。
各种不同的单元类型如下:
service 单元。用于封装一个后台服务进程。
socket 单元。 用于封装一个系统套接字(UNIX)或互联网套接字(INET/INET6)或FIFO管道。 相应的服务在第一个"连接"进入套接字时才会被启动。
target 单元。 用于将多个单元在逻辑上组合在一起。
device 单元。用于封装一个设备文件,可用于基于设备的启动。 并非每一个设备文件都需要一个 device 单元, 但是每一个被 udev 规则标记的设备都必须作为一个 device 单元出现。
mount 单元。 用于封装一个文件系统挂载点(也向后兼容传统的 /etc/fstab 文件)。
automount 单元。 用于封装一个文件系统自动挂载点,也就是仅在挂载点确实被访问的情况下才进行挂载。 它取代了传统的 autofs 服务。
timer 单元。 用于封装一个基于时间触发的动作。它取代了传统的 atd, crond 等任务计划服务。
swap 单元。 用于封装一个交换分区或者交换文件。 它与 mount 单元非常类似。
path 单元。 用于根据文件系统上特定对象的变化来启动其他服务。
slice 单元。 用于控制特定 CGroup 内(例如一组 service 与 scope 单元)所有进程的总体资源占用。
scope 单元。它与 service 单元类似,但是由 systemd 根据 D-bus 接口接收到的信息自动创建, 可用于管理外部创建的进程。
systemd 能够处理各种类型的依赖关系, 包括依赖与冲突(也就是 Requires= 与 Conflicts= 指令), 以及先后顺序(也就是 After= 与 Before= 指令)。 注意, 上述两种类型的依赖关系(依赖与冲突、先后顺序)之间是相互独立的(无关的)。 举例来说,假定 foo.service 依赖于(Requires) bar.service 但并未指定先后顺序, 那么这两个服务将被同时并行启动。 不过在两个单元之间既存在依赖关系也存在先后顺序的情形也很常见。 另外需要注意的是, 大多数依赖关系都是由 systemd 隐式创建和维护的, 因此没有必要额外手动创建它们。
2.2 systemctl:
systemctrl是systemd的系统管理的指令,相应指令如下:http://man.linuxde.net/systemctl
# 重启系统
$ sudo systemctl reboot # 关闭系统,切断电源
$ sudo systemctl poweroff # CPU停止工作
$ sudo systemctl halt # 暂停系统
$ sudo systemctl suspend # 让系统进入冬眠状态
$ sudo systemctl hibernate # 让系统进入交互式休眠状态
$ sudo systemctl hybrid-sleep # 启动进入救援状态(单用户状态)
$ sudo systemctl rescue
2.3 target文件:
Systemd使用“target”来处理引导和服务管理过程。这些systemd里的“target”文件被用于分组不同的引导单元以及启动同步进程。
简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状态。
传统的init启动模式里面,有运行级别的概念,跟 Target 的作用很类似。不同的是,运行级别是互斥的,不可能多个运行级别同时启动,但是多个 Target 可以同时启动。
它与init进程的主要差别如下。
(1)默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。
(2)启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。
(3)配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置;
2.4 日志文件:
systemd使用journalctl来管理相应的日志文件;
# 查看所有日志(默认情况下 ,只保存本次启动的日志)
$ sudo journalctl # 查看内核日志(不显示应用日志)
$ sudo journalctl -k # 查看系统本次启动的日志
$ sudo journalctl -b
$ sudo journalctl -b - # 查看上一次启动的日志(需更改设置)
$ sudo journalctl -b - # 查看指定时间的日志
$ sudo journalctl --since="2012-10-30 18:17:16"
$ sudo journalctl --since "20 min ago"
$ sudo journalctl --since yesterday
$ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"
$ sudo journalctl --since : --until "1 hour ago" # 显示尾部的最新10行日志
$ sudo journalctl -n # 显示尾部指定行数的日志
$ sudo journalctl -n # 实时滚动显示最新日志
$ sudo journalctl -f # 查看指定服务的日志
$ sudo journalctl /usr/lib/systemd/systemd # 查看指定进程的日志
$ sudo journalctl _PID= # 查看某个路径的脚本的日志
$ sudo journalctl /usr/bin/bash # 查看指定用户的日志
$ sudo journalctl _UID= --since today # 查看某个 Unit 的日志
$ sudo journalctl -u nginx.service
$ sudo journalctl -u nginx.service --since today # 实时滚动显示某个 Unit 的最新日志
$ sudo journalctl -u nginx.service -f # 合并显示多个 Unit 的日志
$ journalctl -u nginx.service -u php-fpm.service --since today # 查看指定优先级(及其以上级别)的日志,共有8级
# : emerg
# : alert
# : crit
# : err
# : warning
# : notice
# : info
# : debug
$ sudo journalctl -p err -b # 日志默认分页输出,--no-pager 改为正常的标准输出
$ sudo journalctl --no-pager # 以 JSON 格式(单行)输出
$ sudo journalctl -b -u nginx.service -o json # 以 JSON 格式(多行)输出,可读性更好
$ sudo journalctl -b -u nginx.serviceqq
-o json-pretty # 显示日志占据的硬盘空间
$ sudo journalctl --disk-usage # 指定日志文件占据的最大空间
$ sudo journalctl --vacuum-size=1G # 指定日志文件保存多久
$ sudo journalctl --vacuum-time=1years
三、systemd的争议:
直接看知乎问题吧:https://www.zhihu.com/question/25873473;
systemd的作用的更多相关文章
- [CoreOS 转载] CoreOS实践指南(三):系统服务管家Systemd
转载:http://www.csdn.net/article/2015-01-08/2823477 摘要:CoreOS是采用了高度精简的系统内核及外围定制的操作系统.ThoughtWorks的软件工程 ...
- systemd 进程管理详解
systemd进程管理 systemd管理的优势 1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...) 2.CentOS7 支持开机并行启动服务,显著提高开机 ...
- 浅析 Linux 初始化 init 系统
近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...
- 自动化运维Ansible之常用模块
目录 0.Ansible模块语法 1.Command模块 2.Shell模块 3.Scripts模块 4.Copy模块 5.File模块 6.Yum模块 7.Service模块 8.Cron模块 9. ...
- C6 C7的开机启动流程
C6开机启动流程 1.内核引导,加电自检(通电后检查内核):检查bios的配置,检测硬件 装好系统之后才会进行以下内容 MBR 引导 (3.2.1...) GRUB菜单 (选择不同的系统)(按e,进入 ...
- Linux-开机运行流程
目录 CentOS7开机流程 Linux运行级别 systemd进程管理 systemd的优势 systemd相关文件 systemd启动相关命令 systemd开机自启动相关命令 systemd服务 ...
- CentOS 7下关于systemd的一些唠叨话一:systemd的特点和使用
摘要 近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版 ...
- Systemd入门教程:命令篇
导读 传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)来处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方 ...
- 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd
浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd http://www.ibm.com/developerw ...
随机推荐
- CodeForces-747A
从sqrt(n)枚举到1,一旦满足一定是差最小的数. AC代码: #include<cstdio> #include<cmath> int main(){ int n; whi ...
- TCP/IP读书笔记(4) IPv4和IPv6 路由选择
TCP/IP读书笔记(4) IPv4和IPv6 路由选择 网络层是位于链路层之上,TCP/IP模型中网络层的核心协议是IP协议(Internet protocol). 目前主流的IP协议是IPv4(I ...
- JVM笔记4-对象的创建
1.对象的创建过程: 1.new 类名 2.根据new的参数在常量池中定位一个类的符号的引用. 3.如果没找到这个符号的引用,说明类还没有被加载.则进行类的加载,解析和初始化 4.虚拟机为对象分配内存 ...
- LitePal——Android数据库框架完整使用手册
LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增. ...
- Centos定时启动和清除任务
因为需要定时并发执行任务,所以查到了crontab这个工具,介绍一下其用法: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=roo ...
- shell脚本 awk工具
awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...
- 网络基础tcp/ip协议五
传输层的作用: ip层提供点到点的链接. 传输层提供端到端的链接. 传输层的协议: TCP: 传输控制协议可靠的,面向链接的协议,传输效率低. UDP: 用户数据报协议,不可靠,无连接的服务,传输效率 ...
- arm上电死机怎么烧写boot
一般上电到死机还有一段时间,在这段时间完成,已经出现两次了.
- PCIe设备的配置空间
关于PCI设备的配置空间网上已经有很多资料了,如下图就是PCI设备必须支持的64个字节的配置空间,范围为0x00-0x3f. 很多PCI设备仅仅支持者64字节的配置空间.PCI和PCIe配置空间的区别 ...
- FusionCharts 3D环饼图
1.设计静态页面 Doughnut.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"& ...