我所了解的Systemd

简介: 本文讲的是我所了解的Systemd,【编者的话】本文主要介绍了systemd,systemd是Linux系统中最新的初始化系统(init),它主要的设计目标是克服sysvinit固有的缺点,提高系统的启动速度。文中涉及了一些systemd的基础知识及作者的一些观点。
本文讲的是我所了解的Systemd 【编者的话】本文主要介绍了systemd,systemd是Linux系统中最新的初始化系统(init),它主要的设计目标是克服sysvinit固有的缺点,提高系统的启动速度。文中涉及了一些systemd的基础知识及作者的一些观点。

Ubuntu 16.04把systemd作为Linux启动系统,所以,我意识到是时候学习一下systemd了(虽然有点晚)。systemd出现于大约6年前,并且在几年前就被众多Linux发行版所使用。除了Gentoo,Ubuntu是最后一个默认使用systemd的大的发行版。甚至Ubuntu 15在去年时就转为使用systemd。

Linux社区中关于systemd的讨论已经持续了很长时间了,如果我还年轻,我可能会热衷甚至会参与讨论,但是现在我并不关心那些讨论,我只是想使用大家已达成共识的技术。令人失望的是论战主导着对话,反而想学习systemd是什么变得困难,下面是我为理解systemd所作出的努力。

免责声明: 我并非专家,在一些地方难免犯错。我重申,写这篇博客仅仅是为了作为自己的笔记,欢迎评论,但请不要浪费我的时间讨论一些偏激的意见。

参考资料


由于我自己没有使用装有systemd的系统,关于在实践中使用systemd的链接只搜集了上面那些,所以说,我也有点out了。 unit file 看起来是非常有用的,它对systemd如何启动服务进行配置。systemd也可以使用旧的SysVInit风格的脚本来启动服务,包括解析LSB头部。

我学到的一些东西

systemd是 初始化系统 ,是Linux系统的第一个用户进程,其进程号为1。内核准备就绪后就会运行systemd,systemd的任务是运行其他用户进程从而组成Unix系统,挂载文件系统,配置网络,启动守护进程等。

我们所熟知的init系统是SysVInit, /etc/rc.d 目录中的shell脚本。在当今多核、动态设备的时代,SysVInit逐渐淡出历史舞台, Upstart 是另外一个Linux初始化系统,Ubuntu已经使用了很长时间,但是大家好像都不太喜欢Upstart。 Launchd 是MacOS下的初始化系统,其性能和速度还是可圈可点的,systemd的作者明确表示是受到了Launchd的启发。

systemd是init系统思想的重写版本,其主要的设计目标是提高性能。过去Unix系统启动时间高达90s,使用systemd(或者MacOS下的Launchd)基本可以达到10s,甚至小于1s也是有可能的。systemd可以运行的更快,是因为它可以并发执行任务。此外,它避免了解释shell脚本的所有开销。据测,之于之前的系统,systemd是现代化的、全新的、更好的,虽然我无法评估这一点,但我相信应该如此。

systemd是仅支持Linux的,它采用了一堆非POSIX API来执行任务比如与设备协作,配置安全功能等。

我还没有上手systemd,所以还没接触到其他方面。但是我的理解是,整个Unix配置都合并到unit file中,用来引导systemd配置和启动用户空间程序。

我还有所顾忌,要不要升级Ubuntu 14 到Ubuntu 16,因为必须要升级所有旧东西。升级后会正常工作吗?特别提醒,我将Ubuntu 12升级到Ubuntu 14,然后手动安装了一些东西,导致以太网设备的名称发生了改变,使得机器无法在网络下重启。

一些观点

我真的不关心关于争论的历史。systemd是既成事实,但是去关注一下这些争论,对于更好地理解systemd也是有帮助的。

对于systemd,大家普遍在抱怨的是其复杂性。在一个聚集了60多个相互关联的二进制文件里,systemd做了很多事情,而不仅仅是复制子进程。systemd将udev置于内部来管理设备,它有自己的日志系统(以二进制格式存放),等同于一个定时任务、inetd、atd、虚拟终端、一个登陆进程、监控系统等,当你看到所有被取代的过时的Unix软件时,你会感到惊讶,我也理解了为什么信奉“众多小工具”哲学的人为什么不喜欢systemd了。

另外,在sysvinit中,旧的组件组合在一起非常糟糕。shell需要挂载设备、文件系统,然后启动网络,以便你能够访问其他文件系统,以正确的顺序启动其他守护进程等等。当然udev和挂载可能是单独的软件,但是它们只能以一个特定的关系运行。这么一套包含众多相互依赖组件的复杂系统成本很高,有点像说了一个“众多小工具”的谎话。也有必须要说一下统一init、 cron、inet、登录以及类似的模块,这些都是响应事件的启动程序,为什么不共享代码呢?

作为一个庞大的项目,虽然systemd只有一种思想,仍然会有文化关怀。有些选择让我觉得很奇怪,比如二进制日志格式。无论出于何种原因,大多数Linux发行版都同意使用systemd,我相信他们都会根据自己的需要去塑造systemd,这看起来是一种打造软件的合理方法。

原文链接:Things I learned about systemd(翻译:李加庆 )

原文发布时间为: 2016-05-09
本文作者:YiGagyeong 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:我所了解的Systemd
目录
相关文章
|
10月前
|
监控 关系型数据库 MySQL
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
903 9
|
Java Spring
SpringBoot入门 - 定制自己的Banner
SpringBoot入门 - 定制自己的Banner
219 2
SpringBoot入门 - 定制自己的Banner
|
12月前
|
安全 网络协议 Java
【最佳实践系列】高并发调用百炼语音合成大模型
本文介绍了阿里云百炼的CosyVoice语音合成大模型及其高并发调用优化方案。CosyVoice支持文本到语音的实时流式合成,适用于智能设备播报、音视频创作等多种场景。为了高效稳定地调用服务,文章详细讲解了WebSocket连接复用、连接池和对象池等优化技术,并通过对比实验展示了优化效果。优化后,机器负载降低,任务耗时减少,网络负载更优。同时,文章还提供了异常处理方法及常见问题解决方案,帮助开发者更好地集成和使用SDK。
2728 16
|
开发者 Windows Android开发
跨平台开发新选择:揭秘Uno Platform与.NET MAUI优劣对比,帮你找到最适合的框架,告别选择困难症!
【8月更文挑战第31天】本文对比了备受关注的跨平台开发框架Uno Platform与.NET MAUI的特点、优势及适用场景。Uno Platform基于WebAssembly和WebGL技术,支持Windows、iOS、Android及Web平台,而.NET MAUI由微软推出,旨在统一多种UI框架,支持Windows、iOS和Android。两者均采用C#和XAML进行开发,但在性能、平台支持及社区生态方面存在差异。Uno Platform在Web应用方面表现出色,但性能略逊于原生应用;.NET MAUI则接近原生性能,但不支持Web平台。开发者应根据具体需求选择合适的框架。
628 0
|
关系型数据库 MySQL Linux
宝塔面板BT Composer安装及使用教程
本文介绍,相信你已经掌握了在宝塔面板上安装和使用 Composer 的方法。希望这些内容能对你有所帮助,祝你在开发过程中一切顺利!
2628 2
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
214 3
|
关系型数据库 MySQL 网络安全
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
这篇文章提供了解决Navicat无法连接腾讯云服务器上MySQL问题的步骤,包括调整防火墙设置、更新MySQL权限和检查远程连接配置。
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
|
存储 编解码 PyTorch
Transformers 4.37 中文文档(六十六)(1)
Transformers 4.37 中文文档(六十六)
250 0
|
监控 Java 开发者
Spring Boot 3 升级全解析:新特性与改进点一网打尽
Spring Boot 3 升级全解析:新特性与改进点一网打尽