Unix中服务管理的历史(排序)

2022-02-22 03:46:43

它';复杂的Unix init系统通常也是某种程度的服务管理系统;最明显的例子是Linux';系统。然而,许多人观察到它没有';不必如此,并为此建立了独立的系统,如D.J.Bernstein和#39;这是daemontools。由于服务管理(或缺乏服务管理)已成为Unix init系统的重要领域之一,您可能会想知道为什么它们会';我是来承担这个责任的。一个重要的原因是历史,尽管也有一些实用主义的原因。

(我还认为这是人们想要的。系统管理员通常不想处理初始系统,然后是单独的服务监督系统;他们想处理一件事。)

具体来说,在很长一段时间里,Unix没有';除了初始化重新启动getty进程之外,我们没有任何类型的服务管理。所有服务都是作为启动过程的一部分启动的,启动时是一个非常简单的脚本,在BSD Unix中有点过时。如果需要检查服务状态,可以运行ps;如果需要重新启动服务,可以使用kill终止服务,并手动启动新版本。System V init系统通过创建脚本,将如何启动、停止以及有时检查每个服务的状态的知识封装起来,从而在一定程度上推进了这一点,但它没有对服务本身进行管理;它仍然只是启动(并关闭)系统。注意到服务';s的守护进程已经死亡,重新启动它们取决于你。

(在SystemV init中,理论上可以使用/etc/inittab重新启动守护进程,但整个init系统环境不支持这样做。)

在历史上,启动服务被认为与启动Unix的过程交织在一起。从Sun推出";无盘";基于NFS的工作站和其他人复制了它们,在安装/usr之前,需要启动并运行一些守护程序。你不能';t推迟启动所有服务,直到系统启动';向上';,但同时你不能';I don’不要一下子启动所有的服务,也不要用它来完成,因为它们中的许多都需要安装文件系统之类的东西。从20世纪80年代中期开始,启动守护程序和启动系统的这种纠结使得将所有内容都放在启动脚本中成为一种自然的方式。一个大胆的Unix供应商本可以引入一个独立的服务系统(Sun最终有点像didin SMF),但如果它要处理系统上的所有守护进程和服务,它仍然会深深地纠缠在引导过程中,从而纠缠在初始化系统中。

(第三方系统,如djb和#s daemontools,通常有一个更简单的工作,因为它们没有被设想为处理所有的守护程序和服务;它们只会处理其中一些,如djb和#s的其他程序,如qmail和tinydns。)

实际上,20世纪90年代的Unix厂商并不大胆。相反,他们忙于相互争斗(见OSF/1与SystemV release 4),并被廉价商品的大行其道压得喘不过气来。自由统一体也没有更好的表现;免费的BSD们忙着忠实于UCB BSD 4的纯度。x、 LinuxWashard正在从头开始构建一个Unix(也许由于当时的争论,他不想偏离当时的各种版本)。

(这是一个有点暴躁的情况总结,因为FreeBSD在实践中确实对其init设置进行了重大更改。但无论出于何种原因,它们都没有大幅更改为单独的服务管理器设置,尽管daemontools和其他实现表明,这个想法肯定存在于开源Unixcommunity.Po中。)一个可能的问题是Solaris SMF没有';这不是一个好的系统。)

PS:几年前,我在《init最终如何成为Unix》一书中写了一个与此历史稍有不同的版本';s守护进程管理器。重读一遍,我发现在写这篇文章时,我忘记了在BSD Unix中添加网络是如何使系统启动和守护进程启动复杂化的,因为现在您需要在一些守护进程启动之前配置网络。