systemd 和 supervisor 相比各有哪些优缺点?以及各自的适用场景是什么?

supervisor 所能做的工作是否全都可以使用 systemd 代替? 如果是,在已有 systemd 的情况下,有什么原因值得使用 superv…
关注者
40
被浏览
48,881
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

你问的这两样不是一个维度的东西,所以放在一起比较没什么意义。

systemd 是一个 linux init 实现,但它又不仅仅是一个init的角色,它的作者妄图控制整个linux系统和生态。但是作为这里我们不去讨论它那些让人恶心的做法,只看它作为一个init的用途。因为它是init,所以它在系统里有着特殊的地位。

而supervisor,仅是一个普通的应用程序,在系统里的地位并不比ls、mkdir 等其它应用强(甚至还不如那些命令,因为它都没被通用工具链包含在内)。要说它特殊,仅仅是因为它的功能,它能启动别的应用,并能监视被启动的应用的一部份状态还能在被启动应用退出时再尝试启动它们(虽然时常出错)。貌似它具有了init程序的功能,但如果你写过linux程序的话就就会发现,那几乎是一个日常功能,并没有什么特殊的。

说完了这两种程序的主要区别,很多人会依然不好区分它们的实际用途,好吧,那我就来一句通俗易懂的吧:init程序会把它启动的子程序放入“后端”继续执行,而supervisor会要求它启动的程序“必需保持在前端”运行,要不然它就会认为是没启动成功,从而再去启动它,直至你配置的启动次数用完。


场景方面,supervisor 最多的应用是容器技术中,不管是docker、swarm、Kubernetes还是别的什么,只要是基于docker的技术中或多或少总有机会见到 supervisor的。为什么呢?很简单,因为容器中并没有自己的内核,而是共享宿主机的内核,这样一来,要保证容器内的文件和操作不会污染宿主机(安全方面考量)就不能像开发普通的应用程序一样将程序放入系统的“后端”去做背景运行,只能放在容器里面做前景运行,而这正是supervisor的用途。

虽然 supervisor 会时尝出错,将还在运行中的程序认为是已经退出了,但是一个python写的程序你能要求它什么呢?

发布于 2022-09-30 10:48 ・IP 属地山东