Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7093979
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: 系统运维

2015-04-08 11:07:42

CentOS7/RHEL7 systemd详解

[日期:2015-04-08] 来源:Linux社区  作者:xiaoli110 [字体:  ]

目录
1. 为什么是systemd
(1) 关于Linux服务管理
(2) SysV init的优缺点
(3) UpStart的改进
(4) systemd的诞生
(5)为什么systemd能做到启动很快
2. SysV init介绍
(1) 什么是SystemV
(2)SysV init的运行级别
(3)SysV init运行顺序
(4)SysV init和系统关闭
(5)SysV init的管理和控制功能
3. systemd的特性
(1)systemd解决了那些问题?
(2)systemd的争议在哪里?
(3)systemd能更彻底的结束服务进程
4.  7的systemd特性
(1)套接字服务保持激活功能
(2)进程间通讯保持激活功能
(3)设备保持激活功能
(4)文件路径保持激活功能
(5)系统状态快照
(6)挂载和自动挂载点管理
(7)闪电并行启动
(8)单元逻辑模拟检查
(9)和SysV init向后兼容
5. 如何分析衡量systemd启动速度
(1)查看详细的每个服务消耗的启动时间
(2)查看严重消耗时间的服务树状表
(3)打印分析图及其他命令
6. CentOS 7的systemd向后兼容
(1)systemd对运行级别支持有限。
(2)systemd不支持像init脚本那样的个性化命令。
(3)systemd不支持和没有从systemd启动的服务通讯。
(4)systemd可以只停止运行的服务
(5)不能从标准输出设备读到系统服务信息。
(6)systemd不继承任何上下文环境。
(7)SysV init脚本依赖性
(8)超时机制
7. systemd服务管理
(1) 什么是单元
(2)systemd的服务管理
(3)服务详细信息查看
8. 使用systemd target
(1)怎样知道一个目标需要哪些进程服务?
(2)target与运行级别
(3)target管理
9. 关闭、暂停、休眠系统
10. 通过systemd管理远程系统
11. 创建和修改systemd单元文件
(1)单元文件概述
(2)理解单元文件结构
(3)创建自定义的单元文件
(4)创建emacs.service例子:
(5)创建第二个sshd服务的例子
(6)修改已经存在的单元文件
(7)扩展默认单元配置文件配置
12. 单元实例化
13. VNC SERVER配置


1.为什么是systemd

(1) 关于Linux服务管理

Linux系统从启动到提供服务的过程是这样,先是机器加电,然后通过MBR或者UEFI加载GRUB,再启动内核,内核启动服务,然后开始对外服务。
SysV init UpStart systemd主要是解决服务引导管理的问题。
提示:关于systemd的拼写,官方的说法就是systemd,既不是Syetemd,也是不systemD。

(2) SysV init的优缺点

SysV init是最早的解决方案,依靠划分不同的运行级别,启动不同的服务集,服务依靠脚本控制,并且是顺序执行的。
SysV init方案的优点是:
原理简单,易于理解;
依靠shell脚本控制,编写服务脚本门槛比较低。
缺点是:
服务顺序启动,启动过程比较慢;
不能做到根据需要来启动服务,比如通常希望插入U盘的时候,再启动USB控制的服务,这样可以更好的节省系统资源。

(3) UpStart的改进

为了解决系统服务的即插即用,UpStart应运而生,在CentOS6系统中,SysV init和UpStart是并存的,UpStart主要解决了服务的即插即用。服务顺序启动慢的问题,UpStart的解决办法是把相关的服务分组,组内的服务是顺序启动,组之间是并行启动。

(4) systemd的诞生

SysV init服务启动慢,在以前并不是一个问题,尤其是Linux系统以前主要是在服务器系统上,常年也难得重启一次。有的服务器光硬件检测都需要5分钟以上,相对来说系统启动已经很快了。
但是随着移动互联网的到来,SysV init服务启动慢的问题显得越来越突出,许多移动设备都是基于Linux内核,比如安卓。移动设备启动比较频繁,每次启动都要等待服务顺序启动,显然难以接受,systemd就是为了解决这个问题诞生的。
systemd的设计思路是:
尽可能的快速启动服务;
尽可能的减少系统资源占用。

(5)为什么systemd能做到启动很快

systemd使用并行的方法启动服务,不像SysV init是顺序执行的,所以大大节省了系统启动时间。
使用并行启动,最大的难点是要解决服务之间的依赖性,systemd的解决办法是使用类似缓冲池的办法。比如对TCP有依赖的服务,在启动的时候会检查依赖服务的TCP端口,systemd会把对TCP端口的请求先缓存起来,当依赖的服务器启动之后,在将请求传递给服务,使两个服务通讯。同样的进程间通讯的D-BUS也是这样的原理,目录挂载则是先让服务以为目录被挂载了,到真正访问目录的时候,才去真正操作。

2.SysV init介绍

SysV init是systemV风格的init系统,顾名思义,它源于SystemV系列UNIX。它提供了比BSD风格init系统更高的灵活性。是已经风行了几十年的UNIX init系统,一直被各类Linux发行版所采用。
(1) 什么是SystemV

SystemV,曾经也被称为AT&T SystemV,是Unix操作系统众多版本中的一支。它最初由AT&T开发,在1983年第一次发布。一共发行了4个SystemV的主要版本:版本1、2、3和4。SystemV Release4,或者称为SVR4,是最成功的版本,成为一些UNIX共同特性的源头,例如”SysV初始化脚本“(/etc/init.d),用来控制系统启动和关闭,SystemV Interface Definition(SVID)是一个SystemV如何工作的标准定义。

(2)SysV init的运行级别

SysV init用术语runlevel来定义"预订的运行模式"。SysV init检查'/etc/inittab'文件中是否含有'initdefault'项。来告诉init系统是否有一个默认运行模式。如果没有默认的运行模式,那么用户将进入系统控制台,手动决定进入何种运行模式。
SysV init中运行模式描述了系统各种预订的运行模式。通常会有8种运行模式,即运行模式0到6和S或者s。
每种Linux发行版对运行模式的定义都不太一样。但0,1,6却得到了大家的一致赞同:
0关机
1单用户模式
6重启
通常在/etc/inittab文件中定义了各种运行模式的工作范围。比如定义了runlevel3和5。运行模式3将系统初始化为字符界面的shell模式;运行模式5将系统初始化为GUI模式。无论是命令行界面还是GUI,运行模式3和5相对于其他运行模式而言都是完整的正式的运行状态,计算机可以完成用户需要的任务。而模式1,S等往往用于系统故障之后的排错和恢复。
很显然,这些不同的运行模式下系统需要初始化运行的进程,需要进行的初始化准备都是不同的。比如运行模式3不需要启动X系统。用户只需要指定需要进入哪种模式,SysV init负责执行所有该模式所必须的初始化工作。

(3)SysV init运行顺序

SysV init巧妙地用脚本,文件命名规则和软链接来实现不同的runlevel。首先,SysV init需要读取/etc/inittab文件。分析这个文件的内容,它获得以下一些配置信息:
系统需要进入的runlevel;
捕获组合键的定义;
定义电源fail/restore脚本;
启动getty和虚拟控制台;
得到配置信息后,SysV init顺序地执行以下这些步骤,从而将系统初始化为预订的runlevelX:
/etc/rc.d/rc.sysinit
/etc/rc.d/rc和/etc/rc.d/rcX.d/(X代表运行级别0-6)
/etc/rc.d/rc.local
XDisplayManager(如果需要的话)

1)rc.sysinit脚本功能

首先,运行rc.sysinit以便执行一些重要的系统初始化任务。在RedHat公司的RHEL5中(RHEL6已经使用UpStart了),rc.sysinit主要完成以下这些工作:
激活udev和selinux;
设置定义在/etc/sysctl.conf中的内核参数;
设置系统时钟;
加载keymaps;
激活交换分区;
设置主机名(hostname);
根分区检查和remount;
激活RAID和LVM设备;
开启磁盘配额;
检查并挂载所有文件系统;
清除过期的locks和PID文件;

2)rc.d脚本

完成了以上这些工作之后,SysV init开始运行/etc/rc.d/rc脚本。根据不同的runlevel,rc脚本将打开对应runlevel的rcX.d目录(X就是runlevel),找到并运行存放在该目录下的所有启动脚本。每个runlevelX都有一个这样的目录,目录名为/etc/rc.d/rcX.d。
在这些目录下存放着很多不同的脚本。文件名以S开头的脚本就是启动时应该运行的脚本,S后面跟的数字定义了这些脚本的执行顺序。在/etc/rc.d/rcX.d目录下的脚本其实都是一些软链接文件,真实的脚本文件存放在/etc/init.d目录下。如下所示:
rc5.d目录下的脚本

[root@www~]#ll/etc/rc5.d/ 
lrwxrwxrwx1rootroot16Sep42008K02dhcdbd->../init.d/dhcdbd
....(中间省略).... 
lrwxrwxrwx1rootroot14Sep42008K91capi->../init.d/capi
lrwxrwxrwx1rootroot23Sep42008S00microcode_ctl->../init.d/microcode_ctl
lrwxrwxrwx1rootroot22Sep42008S02lvm2-monitor->../init.d/lvm2-monitor
....(中间省略).... 
lrwxrwxrwx1rootroot17Sep42008S10network->../init.d/network
....(中间省略).... 
lrwxrwxrwx1rootroot11Sep42008S99local->../rc.local
lrwxrwxrwx1rootroot16Sep42008S99smartd->../init.d/smartd
....(底下省略)....

当所有的初始化脚本执行完毕。SysV init运行/etc/rc.d/rc.local脚本。
rc.local是Linux留给用户进行个性化设置的地方。可以把自己私人想设置和启动的东西放到这里,一台LinuxServer的用户一般不止一个,所以才有这样的考虑。

(4)SysV init和系统关闭

SysV init不仅需要负责初始化系统,还需要负责关闭系统。在系统关闭时,为了保证数据的一致性,需要小心地按顺序进行结束和清理工作。
比如应该先停止对文件系统有读写操作的服务,然后再umount文件系统。否则数据就会丢失。
这种顺序的控制这也是依靠/etc/rc.d/rcX.d/目录下所有脚本的命名规则来控制的,在该目录下所有以K开头的脚本都将在关闭系统时调用,字母K之后的数字定义了它们的执行顺序。
这些脚本负责安全地停止服务或者其他的关闭工作。

(5)SysV init的管理和控制功能

此外,在系统启动之后,管理员还需要对已经启动的进程进行管理和控制。SysV init软件包包含了一系列的控制启动,运行和关闭所有其他程序的工具。
halt停止系统。
init就是SysV init本身的init进程实体,以pid1身份运行,是所有用户进程的父进程。最主要的作用是在启动过程中使用/etc/inittab文件创建进程。
killall5就是System V的killall命令。向除自己的会话(session)进程之外的其它进程发出信号,所以不能杀死当前使用的shell。
last回溯/var/log/wtmp文件(或者-f选项指定的文件),显示自从这个文件建立以来,所有用户的登录情况。
lastb作用和last差不多,默认情况下使用/var/log/btmp文件,显示所有失败登录企图。
mesg控制其它用户对用户终端的访问。
pidof找出程序的进程识别号(pid),输出到标准输出设备。
poweroff等于shutdown-h–p,或者telinit0。关闭系统并切断电源。
reboot等于shutdown–r或者telinit6。重启系统。
runlevel读取系统的登录记录文件(一般是/var/run/utmp)把以前和当前的系统运行级输出到标准输出设备。
shutdown以一种安全的方式终止系统,所有正在登录的用户都会收到系统将要终止通知,并且不准新的登录。
sulogin当系统进入单用户模式时,被init调用。当接收到启动加载程序传递的-b选项时,init也会调用sulogin。
telinit实际是init的一个连接,用来向init传送单字符参数和信号。
utmpdump以一种用户友好的格式向标准输出设备显示/var/run/utmp文件的内容。
wall向所有有信息权限的登录用户发送消息。
不同的Linux发行版在这些SysV init的基本工具基础上又开发了一些辅助工具用来简化init系统的管理工作。比如RedHat的RHEL在SysV init的基础上开发了initscripts软件包,包含了大量的启动脚本(如rc.sysinit),还提供了service,chkconfig等命令行工具,甚至一套图形化界面来管理init系统。其他的Linux发行版也有各自的initscript或其他名字的init软件包来简化SysV init的管理。
只要理解了SysV init的机制,在一个最简的仅有SysV init的系统下,可以直接调用脚本启动和停止服务,手动创建inittab和创建软连接来完成这些任务。因此理解SysV init的基本原理和命令是最重要的。甚至也可以开发自己的一套管理工具。

更多详情见请继续阅读下一页的精彩内容: 

阅读(530) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~