我知道它们都是单元文件,但我无法理解它们的特殊含义。我认为目标类似于守护进程,套接字与套接字(IP + 端口)相同,但也具有索引节点号。有人可以用简单的话解释一下吗?
答案1
服务单位:
A unit configuration file whose name ends in .service encodes information about a process controlled and supervised by systemd.
Systemd 服务单元是实际执行和跟踪程序和守护进程的单元,依赖项用于确保服务以正确的顺序启动。它们是最常用的单位类型。
插座单元:
A unit configuration file whose name ends in ".socket" encodes information about an IPC or network socket or a file system FIFO controlled and supervised by systemd, for socket-based activation.
另一方面,套接字单元实际上并不自行启动守护进程。相反,它们只是坐在那里监听 IP 地址和端口或 UNIX 域套接字,当有东西连接到它时,该套接字所属的守护进程就会启动,并将连接交给它。
这有助于确保占用大量资源但很少使用的大型守护进程不会一直运行并占用资源,而是仅在需要时才启动。
目标单位:
A unit configuration file whose name ends in ".target" encodes information about a target unit of systemd, which is used for grouping units and as well-known synchronization points during start-up.
目标用于对单元进行分组和排序。它们在某种程度上大致相当于运行级别,因为在不同的目标上启动不同的服务、套接字和其他单元。与运行级别不同,它们的形式更加自由,您可以轻松地为排序单元创建自己的目标,并且目标之间具有依赖性。
例如,multi-user.target
是大多数守护程序的分组,并且需要basic.target
激活,这意味着分组的所有服务basic.target
将先于 中的服务启动multi-user.target
。
答案2
对于这样一个相对较新的项目来说,systemd 的文档非常出色。首先目标, 从man systemd.target
:
除了单元提供的通用功能之外,目标单元不提供任何附加功能。它们的存在只是为了通过依赖关系(可用作启动目标)对单元进行分组,并为单元之间的依赖关系中使用的同步点建立标准化名称。除此之外,目标单元是经典 SysV init 系统中 SysV 运行级别的更灵活的替代品。
这些“单元组”涵盖了一系列不同的功能,从basic.target
本质上涵盖了系统启动,一直到从 dbus、getty、挂载点到交换和计时器的一切。您可以使用 来查看完整列表man systemd.special
。
服务文件是运行由 systemd 控制的进程的基本单位。再次,来自man systemd.service
:
名称以 .service 结尾的单元配置文件对有关由 systemd 控制和监督的进程的信息进行编码。
这些构成了可以启动、停止、重新启动、重新加载的守护进程。
最后,插座, 从man systemd.socket
:
名称以“.socket”结尾的单元配置文件对有关由 systemd 控制和监督的 IPC 或网络套接字或文件系统 FIFO 的信息进行编码,用于基于套接字的激活。
它们涵盖文件系统或互联网上的套接字,以及作为传输的经典 FIFO。每个套接字单元都有一个匹配的服务单元,如果第一个连接进入套接字或 FIFO,该服务单元就会启动。
除了这些man
页面之外,Lennart 的一系列博客文章也非常值得阅读,管理员的 systemd,它深入介绍了 systemd 的架构和实现(该系列目前有 20 篇文章)。