ZBLOG

.target 和 .service的关系

好的,这是一个非常核心的 systemd 概念。简单来说,.target 定义 “状态”或“阶段”,而 .service 定义 “要执行的具体任务”

它们的关系可以类比为:

  • .target(目标):像一个项目的 里程碑阶段目标(例如:“设计完成”、“代码编写完成”、“测试通过”)。
  • .service(服务):像为了达到某个里程碑所需要完成的 具体任务(例如:“设计师绘制UI”、“程序员编写功能模块”、“测试员执行测试用例”)。

详细解释

1. .service (服务单元)

  • 是什么:这是 systemd 中最常见的单元类型,它用于管理和控制一个后台守护进程(daemon)或一个只执行一次的命令。
  • 做什么:它定义了 如何启动、停止、重载一个具体的软件服务
  • 示例
    • nginx.service: 控制 Nginx Web 服务器。
    • ssh.service: 控制 OpenSSH 远程登录服务。
    • docker.service: 控制 Docker 引擎。

2. .target (目标单元)

  • 是什么:这是一个 逻辑分组单位,它本身不执行任何操作。它的作用是将多个其他单元(主要是 .service,也可以是其他 .target)组合在一起,形成一个有意义的启动状态或阶段。
  • 做什么:它定义了系统应该达到的某种 状态。当启动一个 .target 时,systemd 会确保所有属于这个组的单元都被启动,从而让系统进入该状态。
  • 示例
    • multi-user.target: 代表多用户命令行状态(没有图形界面)。
    • graphical.target: 代表图形界面状态(它通常依赖并包含 multi-user.target)。
    • network-online.target: 代表网络已就绪并可用的状态。
    • reboot.target: 代表重启系统的状态。

核心关系:依赖与组合

.target.service 的关系主要通过依赖关系来建立。

a) .target 要求/包含 .service

这是最主要的关系。一个 .target 文件通过 Wants, Requires, After等指令来指定它需要哪些服务。

例如,查看 graphical.target

systemctl cat graphical.target

你可能会看到它包含了:

Wants=display-manager.service
After=multi-user.target display-manager.service
...

这表示:“为了达到 graphical.target 这个图形状态,我‘想要’(Wants) display-manager.service(显示管理器,如 GDM, SDDM)这个服务运行起来,并且我必须在其之后(After)完成。”

b) .service 想要进入 .target

反过来,一个 .service 文件会通过 WantedBy, RequiredBy等指令声明自己属于哪个目标。

例如,查看一个普通的服务(如 nginx.service):

systemctl cat nginx.service

你通常会看到:

[Install]
WantedBy=multi-user.target

这表示:“当系统通过 systemctl enable nginx.service 启用我时,请为我创建一个符号链接,让我成为 multi-user.target.wants/ 目录的一部分。这样,每当 multi-user.target 被启动时,我就会自动被启动。”


🌟 “启动级别”的现代化替代

在旧的 SysVinit 系统中,有“运行级别”(runlevel)的概念(如级别3是多用户文本模式,级别5是图形模式)。.target 就是运行级别的现代化替代:

SysVinit Runlevel systemd Target Description
0 poweroff.target 关机
1, s, single rescue.target 单用户救援模式
2, 4 (无直接等价, custom) 多用户(未标准化)
- - -
- - -
- - -

你可以使用以下命令在两者之间切换视图:

# 查看当前目标
systemctl get-default

# 设置默认进入的目标
sudo systemctl set-default multi-user.target

#切换到图形界面目标(无需重启)
sudo systemctl isolate graphical.target

📊总结表格

特性 .service (服务单元) .target (目标单元)
本质 一个具体的进程或任务 一个逻辑上的组或系统状态
作用 控制如何启动/停止一个程序 将多个单元组合成一个一致的状态
类比 员工的具体工作任务 项目的里程碑或阶段目标
依赖关系方向 被 target 包含【主要】 包含 service和其他target【主要】
“想要被”某个 target启动【安装时】 “要求”某个 service运行【运行时】

理解这种关系是掌握 systemd 和服务管理的关键。.target提供了结构和组织,而.service则提供了实际要执行的内容。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24176

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?