本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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(单位)。