SystemD是Linux下的一种init软件,由LennartPoettering带头开发,并在LGPL2.1及其后续版本许可证下开源发布。Lennart是redhat员工,但SystemD不是redhat项目。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的SystemV与BSD风格init程序。
SystemD这一名字源于Unix中的一个惯例:在Unix中常以d作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识。除此以外,SystemD亦是借代英文术语D体系,而这一术语即是用于描述一个人具有快速地适应环境并解决困难的能力。
SystemD被设计用来改进SysVinit的缺点,与Ubuntu的upstart形成技术竞争。SystemD的很多概念来源于苹果的launchd。目标是尽可能启动更少进程;尽可能将更多进程并行启动(这是性能优于SysVinit的理念基础)。SystemD尽可能减少对Shell脚本的依赖。传统SysVinit使用inittab来决定运行哪些Shell脚本,大量使用Shell脚本被认为是效率低下无法并行的原因。SystemD使用了Linux专属技术,不再顾及POSIX兼容,只要能满足社会变革的需要,突破一些可能过时的技术约束,这也是当今创信理念的需要,相信市场会给出评判。
与多数发行版使用的SystemV风格init相比,SystemD采用了以下新技术:
采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
用cgroups代替PID来追踪进程,因此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
从设计构思上说,由于SystemD使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。有鉴于此,基于kFreeBSD分支的软件源无法纳入SystemD。
大多数主流发行版要么已经采用Systemd,要么即将在下个发布中采用(如Debian和Ubuntu)。在本教程中,我们使用Fedora21(该发行版已经是Systemd的优秀实验场地)的一个预览版进行演示,但不论您用哪个发行版,要用到的命令和注意事项都应该是一样的。这是Systemd的一个加分点:它消除了不同发行版之间许多细微且琐碎的区别。
在终端中输入psax|grepsystemd,看到第一行,其中的数字1表示它的进程号是1,也就是说它是Linux内核发起的第一个程序。因此,内核一旦检测完硬件并组织好了内存,就会运行/usr/lib/systemd/systemd可执行程序,这个程序会按顺序依次发起其他程序。(在还没有Systemd的日子里,内核会去运行/sbin/init,随后这个程序会在名为SysVinit的系统中运行其余的各种启动脚本。)
Systemd的核心是一个叫单元unit的概念,它是一些存有关于服务service(在运行在后台的程序)、设备、挂载点、和操作系统其他方面信息的配置文件。Systemd的其中一个目标就是简化这些事物之间的相互作用,因此如果你有程序需要在某个挂载点被创建或某个设备被接入后开始运行,Systemd可以让这一切正常运作起来变得相当容易。(在没有Systemd的日子里,要使用脚本来把这些事情调配好,那可是相当丑陋的。)要列出您Linux系统上的所有单元,输入以下命令:
复制代码