浅析Linux初始化init系统之第6部分: Dinit
2025-04-29 15:12:29 阿炯

Dinit — service manager and "init" system.


Dinit is a service manager / supervision system, which can (on Linux) also function as a system manager and init.

Dinit是一个具有依赖支持的服务管理器,它也可以充当系统的“init”程序(sysVinit, runit, OpenRC, BSD-RC, S6, 66, Busybox, dinit)。创建它的目的是提供一个具有依赖管理的可移植init系统,它在功能上优于许多现有的init。开发目标包括简洁的设计、健壮性、可移植性、可用性和避免功能膨胀(同时仍然处理常见和一些不太常见的用例)。其设计目的是集成而不是包含或替换其他系统软件。

Dinit可以并行启动多个服务,并具有依赖管理(即,如果一个服务的操作依赖于另一个服务,则后一个服务将首先启动)。它可以监控服务对应的进程,并在服务中止时重新启动它,并且它可以以一种智能的方式做到这一点——首先“回滚”所有依赖的服务,并在它们的依赖关系得到满足时重新启动它们。该工具可用于启动或停止服务,并检查其状态。

Dinit被设计为作为系统服务管理器(以root身份运行,使用系统路径进行配置)或用户进程(以用户身份运行,使用用户主目录中的路径进行配置)运行。用于POSIXy操作系统,如Linux和OpenBSD。它是用C++开发编写的,并使用了Dasynq事件处理库,该库是专门为支持Dinit而编写的。(请注意,Dasynq与Dinit捆绑在一起,因此编译时不需要单独的副本;但捆绑的副本不包括文档或测试套件),整体在ApacheV2.0协议下授权使用。

主要特性

允许用户使用类似于OpenRC使用的简单命令启动和停止守护进程(即服务);
处理系统启动和关闭;
提供了一个名为/usr/bin/dinit的1号进程,它派生所有其他进程;
提供并行启动服务和依赖管理;
提供服务监督,即自动重新启动失败的守护进程;
允许用户设置服务。

功能模块

Dinit - Dinit守护程序;
Dinit-service -服务描述格式和服务设置;
Dinitctl - Dinitctl,用于控制dinit守护进程和管理服务的实用程序;
Dinitcheck - 一个检查服务描述是否有错误/lint的工具;
Dinit-monitor - 一个实用程序,用于监视服务并在服务状态发生变化时运行命令。

文件/目录

/etc/dinit.d/ - 用户安装的dinit服务文件;
/usr/lib/dinit.d/ - 系统单元服务文件;
/etc/dinit.d/config/ - dinit服务配置;
/etc/dinit.d/boot.d/ - 启动时运行的服务;
/usr/lib/dinit/ - dinit包装脚本;
/var/log/dinit/ - dinit服务的日志;
/etc/dinit.d/service_name-pre - preparation service,在某些情况下这是需要的,因为"preparation"阶段必须以root用户运行,而服务本身必须以其用户运行;
/etc/dinit.d/user - 用户服务。

用法

几乎所有与dinit的交互都是通过dinitctl程序完成的。
启动服务:# dinitctl start service_name
停止服务:# dinitctl stop service_name
重启服务:# dinitctl restart service_name
启用服务:# dinitctl enable service_name
禁用服务:# dinitctl disable service_name
列表服务:# dinitctl list

Dinitcheck通常用于检查dinit服务目录是否有问题,它将检查任何语法错误、无效的参数值和依赖循环。

Artix linuxwiki页面上有更多介绍。在Chimera Linux中亦有使用。

最新版本:0.19


项目主页:https://davmac.org/projects/dinit/

https://github.com/davmac314/dinit