Systemd 入门学习

187 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.Systemd简介 <h1>

Systemd 为系统的启动和管理提供一套完整的解决方案,systemd可以启动和管理所有其他进程,被称为“进程之母”。(init是老发行版本采用的方式)

使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。Systemd 是一系列工具的集合,其作用也远远不仅是启动操作系统,它还接管了后台服务、结束、状态查询,以及日志归档、设备管理、电源管理、定时任务等许多职责,并支持通过特定事件(如插入特定 USB 设备)和特定端口数据触发的 On-demand(按需)任务。

2.Systemd 管理带来的优势 <h1>

(1)更少的进程 Systemd 提供了服务按需启动的能力,使得特定的服务只有在真定被请求时才启动。

(2)允许更多的进程并行启动:在 SysV-init 时代,将每个服务项目编号依次执行启动脚本。Ubuntu 的 Upstart 解决了没有直接依赖的启动之间的并行启动。而 Systemd 通过 Socket 缓存、DBus 缓存和建立临时挂载点等方法进一步解决了启动进程之间的依赖,做到了所有系统服务并发启动。对于用户自定义的服务,Systemd 允许配置其启动依赖项目,从而确保服务按必要的顺序运行。 (3)使用 CGroup 跟踪和管理进程的生命周期:在 Systemd 之前的主流应用管理服务都是使用进程树 来跟踪应用的继承关系的,而进程的父子关系很容易通过两次 fork 的方法脱离。而 Systemd 则提供通过 CGroup 跟踪进程关系,引补了这个缺漏。通过 CGroup 不仅能够实现服务之间访问隔离,限制特定应用程序对系统资源的访问配额,还能更精确地管理服务的生命周期。

3.Systemd 的 Unit 文件 <h1>

Systemd 可以管理所有系统资源,不同的资源统称为 Unit(单位)。

在 Systemd 的生态圈中,Unit 文件统一了过去各种不同系统资源配置格式,例如服务的启/停、定时任务、设备自动挂载、网络配置、虚拟内存配置等。而 Systemd 通过不同的文件后缀来区分这些配置文件。

Systemd 支持的 12 种 Unit 文件类型

  • .automount:用于控制自动挂载文件系统,相当于 SysV-init 的 autofs 服务
  • .device:对于 /dev 目录下的设备,主要用于定义设备之间的依赖关系
  • .mount:定义系统结构层次中的一个挂载点,可以替代过去的 /etc/fstab 配置文件
  • .path:用于监控指定目录或文件的变化,并触发其它 Unit 运行
  • .scope:这种 Unit 文件不是用户创建的,而是 Systemd 运行时产生的,描述一些系统服务的分组信息
  • .service:封装守护进程的启动、停止、重启和重载操作,是最常见的一种 Unit 文件
  • .slice:用于表示一个 CGroup 的树,通常用户不会自己创建这样的 Unit 文件
  • .snapshot:用于表示一个由 systemctl snapshot 命令创建的 Systemd Units 运行状态快照
  • .socket:监控来自于系统或网络的数据消息,用于实现基于数据自动触发服务启动
  • .swap:定义一个用户做虚拟内存的交换分区
  • .target:用于对 Unit 文件进行逻辑分组,引导其它 Unit 的执行。它替代了 SysV-init 运行级别的作用,并提供更灵活的基于特定设备事件的启动方式
  • .timer:用于配置在特定时间触发的任务,替代了 Crontab 的功能

4.Systemd 的命令 <h1>

1 systemctl

systemctl是 Systemd 的主命令,用于管理系统。

2 systemd-analyze

systemd-analyze命令用于查看启动耗时。

3 hostnamectl

hostnamectl命令用于查看当前主机的信息。

4 localectl

localectl命令用于查看本地化设置。

5 timedatectl

timedatectl命令用于查看当前时区设置。

6 loginctl

loginctl命令用于查看当前登录的用户。 Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。