云原生大佬重生,记忆逐步复苏(九:systemd进程)

目录

1:什么是systemd守护进程

2:Systemd参与的系统的初始化是怎么样的?

3:systemd的单元类型

4:具体的单元配置文件解析


1:什么是systemd守护进程

systemd 是现代 Linux 系统中的一个系统和服务管理器,用于初始化系统、管理系统服务、维护系统状态、控制系统资源,并提供一系列其他功能来简化系统管理。

systemd 的主要作用和功能

-系统初始化:

systemd 是 Linux 系统的第一个进程(PID 1),负责在系统启动时初始化其他系统组件和服务。它取代了传统的 SysVinit 和 Upstart,成为大多数 Linux 发行版的标准初始化系统。

并行启动服务:

-与传统的串行启动方式不同,systemd 支持并行启动服务,显著缩短了系统启动时间。

它通过管理服务之间的依赖关系,确保必要的服务按正确的顺序启动。

服务管理:

-systemd 使用 systemctl 命令统一管理服务的启动、停止、重启和状态查询。它支持服务的自动重启、监控和日志记录。

-资源管理:

systemd 利用 Linux 内核的 cgroups(控制组)功能,限制和监控服务的资源使用,如 CPU、内存和 I/O。

-日志管理:

systemd 集成了 journald,用于统一收集和管理系统日志。它支持日志的持久化存储、过滤和查询。

-挂载点管理:

systemd 自动管理文件系统的挂载点,支持动态挂载点的自动挂载。

-目标(Target)管理:

systemd 使用目标(Target)替代传统的运行级别,灵活控制系统状态。

-按需启动(Socket 激活):

systemd 支持按需启动服务,仅在需要时激活相关服务,减少资源消耗。

2:Systemd参与的系统的初始化是怎么样的?

加载配置文件:

Systemd 在启动时会加载 /etc/systemd/system/ 和 /usr/lib/systemd/system/ 目录中的单元文件。

这些文件定义了系统服务、挂载点、套接字等资源的配置。

挂载文件系统:

Systemd 会根据配置文件(如 /etc/fstab)和挂载单元文件(.mount)挂载文件系统。

特殊目标单元(如 local-fs.target 和 swap.target)用于管理本地文件系统和交换空间。

启动目标单元:

Systemd 会根据默认目标(如 graphical.target 或 multi-user.target)启动相关服务。

目标单元是多个单元的组合,用于定义系统启动时的状态。

服务启动:

Systemd 根据服务单元文件(.service)的配置启动服务。

服务之间的依赖关系通过 Requires=、Wants=、Before= 和 After= 等指令定义。

套接字激活:

对于基于套接字激活的服务,systemd 会监听指定的套接字,当有连接请求时,自动启动相关服务

3:systemd的单元类型

在 systemd 中,单元(Unit)是系统和服务管理的基本对象。每种单元类型都有其特定的用途和配置文件格式。以下是一些常见的单元类型及其用途:

1. 服务单元(service)

服务单元是最常见的单元类型,用于管理后台服务(如 HTTPD、MySQL 等)。

用途:启动、停止、重启服务。

配置文件:*.service

示例:

[Unit]

Description=Apache HTTP Server

After=network.target

[Service]

Type=forking

ExecStart=/usr/sbin/httpd -k start

ExecStop=/usr/sbin/httpd -k stop

User=apache

Group=apache

[Install]

WantedBy=multi-user.target

2. 套接字单元(socket)

套接字单元用于基于套接字激活的服务。它允许在有连接请求时自动启动服务。

用途:监听网络或 Unix 套接字,按需启动服务。

配置文件:*.socket

示例:

[Unit]

Description=Apache HTTPD Server Socket

After=network.target

[Socket]

ListenStream=80

Accept=no

Service=httpd.service

[Install]

WantedBy=sockets.target

3. 目标单元(target)

目标单元用于定义系统的运行级别或状态(如图形界面、多用户模式等)。

用途:定义系统的运行目标。

配置文件:*.target

示例:

[Unit]

Description=Multi-User Graphical Target

Wants=graphical.target

4. 挂载单元(mount)

挂载单元用于管理文件系统的挂载点。

用途:挂载文件系统。

配置文件:*.mount

示例:

[Unit]

Description=Mount NFS Share

After=network.target

[Mount]

What=192.168.1.100:/nfs/share

Where=/mnt/nfs

Type=nfs

Options=defaults,_netdev

[Install]

WantedBy=multi-user.target

5. 自动挂载单元(automount)

自动挂载单元用于定义自动挂载点,当访问挂载点时自动挂载文件系统。

用途:按需挂载文件系统。

配置文件:*.automount

示例:

[Unit]

Description=Automount NFS Share

After=network.target

[Mount]

What=192.168.1.100:/nfs/share

Where=/mnt/nfs

Type=nfs

Options=defaults,_netdev

[Automount]

Where=/mnt/nfs

TimeoutIdleSec=30

[Install]

WantedBy=multi-user.target

6. 设备单元(device)

设备单元用于管理硬件设备。

用途:管理硬件设备的初始化和状态。

配置文件:*.device

示例:

[Unit]

Description=USB Storage Device

7. 快照单元(snapshot)

快照单元用于创建和恢复系统的快照状态。

用途:管理系统的快照状态。

配置文件:*.snapshot

示例:

[Unit]

Description=System Snapshot

8. 路径单元(path)

路径单元用于监控文件系统路径的变化,并触发操作。

用途:监控文件系统路径的变化。

配置文件:*.path

示例:

[Unit]

Description=Watch for File Changes

[Path]

PathExists=/var/log/myapp.log

Unit=myapp.service

[Install]

WantedBy=multi-user.target

9. 交换单元(swap)

交换单元用于管理交换空间(如交换文件或交换分区)。

用途:管理交换空间。

配置文件:*.swap

示例:

[Unit]

Description=Swap File

Before=local-fs.target

[Swap]

What=/swapfile

Priority=10

[Install]

WantedBy=multi-user.target

10. 时间单元(timer)

时间单元用于定义定时任务,类似于传统的 cron 作业。

用途:定义定时任务。

配置文件:*.timer

示例:

[Unit]

Description=Run myapp every day

[Timer]

OnCalendar=daily

Unit=myapp.service

[Install]

WantedBy=timers.target

总结

systemd 提供了多种单元类型,每种单元类型都有其特定的用途和配置文件格式。通过合理使用这些单元类型,可以灵活地管理系统服务、设备、挂载点、定时任务等资源。

4:具体的单元配置文件解析

以下以httpd.Service为例来解析单元文件中的各个关键词作用

云原生大佬重生,记忆逐步复苏(九:systemd进程)_第1张图片

-unit部分定义了描述,和启动顺序,依赖关系等等

-service部分定义了服务的具体行为,包括启动,重启,停止以及重启策略,间隔时间

-install部分定义了安装的目标和依赖关系,

[Unit] 部分定义了单元的基本属性,包括描述、依赖关系和启动顺序等。

主要关键词及其作用

Description=

作用:提供单元的简短描述。

示例:Description=The Apache HTTP Server

Documentation=

作用:指定与单元相关的文档路径或链接。

示例:Documentation=man:httpd(8)

After=

作用:指定当前单元在哪些单元启动之后启动。

示例:After=network.target

解释:httpd.service 会在 network.target 启动之后启动。

Before=

作用:指定当前单元在哪些单元启动之前启动。

示例:Before=multi-user.target

解释:httpd.service 会在 multi-user.target 启动之前启动。

Requires=

作用:指定当前单元依赖的其他单元。如果这些单元失败,当前单元也会失败。

示例:Requires=network.target

Wants=

作用:指定当前单元希望启动的其他单元,但这些单元的失败不会影响当前单元。

示例:Wants=mysqld.service

Conflicts=

作用:指定当前单元与其他单元的冲突关系。如果冲突的单元正在运行,当前单元无法启动。

示例:Conflicts=apache2.service

Condition...=

作用:定义当前单元启动的条件。只有在满足这些条件时,单元才会启动。

示例:ConditionPathExists=/etc/httpd/conf/httpd.conf

[Service] 部分定义了服务的具体行为,包括启动、停止、重启等操作。

主要关键词及其作用

Type=

作用:定义服务的启动类型。

常见值:

simple:默认值,适用于前台运行的服务。

forking:适用于通过 fork() 创建子进程的服务。

oneshot:适用于只运行一次的命令。

notify:适用于支持 systemd 通知机制的服务。

示例:Type=forking

ExecStart=

作用:定义启动服务时执行的命令。

示例:ExecStart=/usr/sbin/httpd -k start

ExecStop=

作用:定义停止服务时执行的命令。

示例:ExecStop=/usr/sbin/httpd -k stop

ExecReload=

作用:定义重新加载服务配置时执行的命令。

示例:ExecReload=/usr/sbin/httpd -k graceful

Restart=

作用:定义服务失败时的重启策略。

常见值:

no:不自动重启。

on-failure:仅在服务失败时重启。

always:无论成功或失败,总是重启。

示例:Restart=on-failure

RestartSec=

作用:定义服务重启的间隔时间(单位为秒)。

示例:RestartSec=5

User= 和 Group=

作用:定义服务运行时的用户和组。

示例:User=apache

Group=apache

WorkingDirectory=

作用:定义服务的工作目录。

示例:WorkingDirectory=/var/www/html

PrivateTmp=

作用:是否为服务创建独立的临时目录。

示例:PrivateTmp=true

Limit...=

作用:定义服务的资源限制,如 CPU 时间、内存使用量等。

示例:LimitNOFILE=65536

PIDFile=

作用:定义服务的 PID 文件路径。

示例:PIDFile=/var/run/httpd.pid

[Install] 部分定义了单元的安装目标和依赖关系,通常用于控制单元的自动启动行为。

主要关键词及其作用

WantedBy=

作用:指定当前单元被哪些目标需要。当目标启动时,当前单元会自动启动。

示例:WantedBy=multi-user.target

解释:httpd.service 会在系统进入 multi-user.target 时自动启动。

RequiredBy=

作用:指定当前单元被哪些目标需要,且这些目标的启动依赖于当前单元。

示例:RequiredBy=multi-user.target

Alias=

作用:为单元文件提供别名。

示例:Alias=httpd

Also=

作用:指定与当前单元一起安装的其他单元。

示例:Also=httpd.socket

  如果你看到了这里,说明你已经看懂了systemd守护进程是如何通过单元去控制和管理系统服务和资源的,你的实力更进了一步,距离你跨入云原生linux基础境中期巅峰,加油啊少年。(温馨提示:成为我的粉丝吧,给我点个赞,收藏个博客什么的)

云原生大佬重生,记忆逐步复苏(九:systemd进程)_第2张图片

你可能感兴趣的:(云原生大佬重生,记忆逐步复苏,云原生,linux)