systemd介绍(二)

systemd是Linux下的一种init软件,作为系统与服务管理器,替代了传统的System V init。它提供了处理系统服务依赖关系的能力,实现服务并行启动,提高系统初始化效率。systemd使用unit管理服务,通过systemctl命令进行服务管理,与System V init的主要区别在于启动性能和并行启动能力。此外,systemd采用socket和总线激活服务,使用Cgroups追踪进程,提供了丰富的系统管理命令,如systemctl、journalctl等,同时具备强大的日志管理功能。
摘要由CSDN通过智能技术生成

systemd-使用篇


Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。RHEL 7、等linux发行版系统已经替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。

一、systemd概述

systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。
systemd是一个专用于 Linux 操作系统的系统与服务管理器。当作为启动进程(PID=1)运行时,它将作为初始化系统运行,也就是启动并维护各种用户空间的服务。 
为了与传统的 SysV 兼容,如果将 systemd 以 init 名称启动,并且"PID≠1",那么它将执行 telinit 命令并将所有命令行参数原封不动的传递过去。 这样对于普通的登录会话来说,无论是调用 init 还是调用 telinit 都是等价的。
当作为系统实例运行时,systemd将会按照system.conf配置文件以及system.conf.d配置目录中的指令工作;当作为用户实例运行时,systemd 将会按照user.conf配置文件 以及 user.conf.d配置目录中的指令工作。
systemd将各种系统启动和运行相关的对象,表示为各种不同类型的单元(unit),并提供了处理不同单元之间依赖关系的能力。大部分单元都静态的定义在单元文件中,但是有少部分单元则是动态自动生成的:其中一部分来自于其他传统的配置文件(为了兼容性),而另一部分则动态的来自于系统状态或可编程的运行时状态。单元既可以处于活动(active)状态,也可以处于停止(inactive)状态,当然也可以处于启动中(activating)或停止中(deactivating)的状态。还有一个特殊的失败(failed)状态,意思是单元以某种方式失败了(进程崩溃了、或者触碰启动频率限制、或者退出时返回了错误代码、或者遇到了操作超时之类的故障)。当进入失败(failed)状态时,导致故障的原因将被记录到日志中以方便日后排查。需要注意的是,不同的单元可能还会有各自不同的"子状态",但它们都被映射到上述五种状态之一。
systemd的优点是功能强大、使用方便,缺点是体系庞大、非常复杂。事实上,现在还有很多人反对使用systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix哲学。

二、systemd与System V init的区别以及作用

与以前的发行版使用的System V风格init相比,systemd采用了以下新技术:(1) 采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;(2)用Cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
无论怎样,RHEL 7系统选择systemd初始化进程服务已经是一个既定事实,因此也没有了“运行级别”这个概念,Linux系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元(Unit),systemd用目标(target)代替了System V init中运行级别的概念,这两者的区别如下所示。
表1:System V init和systemd的区别

System V init运行级别 systemd目标名称 作用
0 runlevel0.target -> poweroff.target 关机
1 runlevel1.target -> rescue.target 单用户模式
2 runlevel2.target -> multi-user.target 等同于级别3
3 runlevel3.target -> multi-user.target 多用户的文本界面
4 runlevel4.target -> multi-user.target 等同于级别3
5 runlevel5.target -> graphical.target 多用户的图形界面
6 runlevel6.target -> reboot.target 重启
emergency emergency.target 紧急shell

每个Unit都有一个配置文件,告诉Systemd怎么启动这个Unit。Systemd默认从目录/etc/systemd/system/读取配置文件,但是里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/或者/lib/systemd/system/,Unit的配置文件都存放在这个目录里面。
例如:将系统默认的运行模式修改为“多用户,无图形”,可直接用ln命令把多用户模式目标文件链接到/etc/systemd/system/目录
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
初识systemd-使用篇
在RHEL6及之前的发行版系统是使用service、chkconfig等命令来管理系统服务,在RHEL7系统中是使用systemctl命令来管理服务的。我们来看一下它们之间的区别。
表2:服务的启动、重启、停止等常用命令对比

System V init命令 systemctl命令 作用
service foo start systemctl start foo.service 启动服务
service foo restart systemctl restart foo.service 重启服务
service foo stop systemctl stop foo.service 停止服务
service foo reload systemctl reload foo.service
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值