Ubuntu 从 6.10 版本开始使用 Upstart。这是一个相对简单且易于管理系统和初始化的程序,允许人们直观、快速地按需启动和停止服务。
然而,Ubuntu现在附带了systemd
,这对于服务和进程管理等简单任务来说似乎更为复杂。
systemd
旧版 Upstart 模型没有或无法提供哪些有用的功能,使得 Ubuntu 可以升级到该模型?
答案1
此时(该问题发布三年后)这个问题的不同表述已经被问过很多次了,你可能用搜索引擎就能找到更详细、更有趣的答案。但是,为了让这个问题有一个真正的答案,让我引用一个来自 unix.stackexchange 网站:
upstart 和 systemd 都试图解决传统 SysV init 系统的一些局限性问题。例如,某些服务需要在其他服务之后启动(例如,在网络运行之前您无法挂载 NFS 文件系统),但 SysV 处理该问题的唯一方法是将 rc#.d 目录中的链接设置为一个位于另一个之前。此外,当添加或更改依赖项时,您可能需要稍后重新编号所有内容。Upstart 和 Systemd 具有更智能的设置来定义需求。此外,还有一个问题,即所有内容都是某种类型的 shell 脚本,并不是每个人都能编写最好的 init 脚本。这也会影响启动速度。
我认为 systemd 的一些优点是:
- 每个启动的进程都有自己的 cgroup 或特定的 cgroup。
- 为服务预先创建套接字和文件句柄,类似于 xinetd 为其服务所做的操作,从而允许依赖服务更快地启动。例如,systemd 将为 syslog 保持打开 /dev/log 的文件句柄,并且发送到 /dev/log 的后续服务将缓冲其消息,直到 syslogd 准备好接管为止。
- 启动服务时运行的进程更少。这意味着您无需编写 shell 脚本来启动服务。这可以提高速度,而且(在我看来)一开始就更容易设置。
我知道的一个缺点是,为了利用 systemd 的套接字/FH 预分配,许多守护进程必须进行修补才能由 systemd 将 FH 传递给它们。
最大的误解关于 systemd 的博客文章也有这一点:
- 误解:systemd 是由于 NIH 综合症而创建的。
事实并非如此。在开始开发 systemd 之前,我们一直在推动 Canonical 的 Upstart 得到广泛采用(Fedora/RHEL 也曾使用过它)。然而,我们最终得出结论,它的设计在核心上存在缺陷(至少在我们看来:最根本的是,它将依赖关系管理留给管理员/开发人员,而不是在代码中解决这个难题),如果核心出现问题,你最好替换它,而不是修复它。但这绝不是唯一的原因,还有其他因素在起作用,例如围绕它的许可/贡献协议混乱。不过,NIH 并不是原因之一。
答案2
事实上...不是。随着越来越多的人真正使用 Linux 并目睹 Potterware 灾难的发生,我们正在转向 systemd 免费发行版。
http://without-systemd.org/wiki/index.php/Main_Page
http://www.gabordemooij.com/index.php?p=/escape_from_systemd
该主题发起者来自另一个主题回复,是典型的微软式的 systemd 支持宣传。
“我认为一个目标是在所有主流 Linux 发行版中建立一个单一的初始化系统(目前,这些发行版的市场份额较高:ubuntu、centos、suse) – knb 8 月 12 日 7:37”
这可能是微软或苹果工程师的态度,在 Linux 中没有这种态度。一遍又一遍地说这很烦人...systemd 与 init 无关...它是一个抽象层,与 Windows 中的抽象层非常相似,位于内核和其他一切之间。它与启动系统无关...它与创建一种没有 systemd 就无法运行的情况有关。想一想...您的系统现在将更加脆弱和脆弱....听起来像 Linux 吗?它不是...