系统初始化管理
系统初始化守护进程
- 区分使用的时哪一种
ls-al /sbin/init如果指向systemd的符号链接,就说明使用的是 systemd的现在方式
如果指向sysvinit的符号链接,就说明使用的是 service命令的传统方式
- 很多服务包会同时提供这两种方式相关的文件
service (SysV Init 时代的工具)
它属于传统的 SysV Init 初始化系统。这是 systemd 出现之前,大多数 Linux 发行版使用的系统。
Init 系统按照顺序(从运行级别 0 到 6)串行地执行一系列位于 /etc/init.d/ 目录下的
shell 脚本。这些脚本接受 start, stop, restart, status 等参数
service 命令的作用:它是一个统一的命令,用于调用这些 init.d 脚本,本质上是一个 包装器
- 服务启动方式
# 传统方式,直接调用脚本sudo/etc/init.d/docker start# 使用 service 命令(更规范)sudoservicedocker start- 缺陷(在速度、依赖管理、日志、资源控制等方面的局限性)
串行启动:一个服务启动完再启动下一个,速度慢。
依赖关系复杂:通过脚本中的注释或特殊文件来定义,管理不便。
只管理进程:对进程以外的系统资源(如套接字、挂载点)管理能力弱
systemd(现代初始化系统)
它是一个 系统和服务管理器,不仅仅是 init 系统的替代品,更是一个庞大的项目,旨在统一和标准化 Linux 系统的引导和服务管理
- 改进
并行启动:通过 Socket 激活、D-Bus 激活 等技术,最大程度地并行启动服务,极大地提升了启动速度。
基于单元的声明式配置:服务、挂载点、设备、套接字等都被抽象为 单元,由统一的配置文件(.service, .socket, .mount 等)定义。
强大的依赖管理:在单元文件中通过 Requires, Wants, After 等指令清晰定义依赖,systemd 会据此计算出最优启动顺序。
集成日志系统 journald:提供结构化的二进制日志,便于检索和过滤。
资源控制(cgroups)集成:可以方便地对服务使用的 CPU、内存、IO 等资源进行限制和监控
核心概念:单元
- 单元是 systemd 管理资源的基本对象,由单元文件定义
/usr/lib/systemd/system/#软件包安装的默认单元文件。/etc/systemd/system/#系统管理员创建或覆盖的本地单元文件(优先级更高)常见单元类型
.service
- .service :
最重要的类型, 代表一个服务和守护进程
单元配置语法格式 配置文件:包含执行命令、依赖、策略这些,systemd能看懂并执行
.socket
- .socket: 一个 IPC 或网络套接字。可以实现“按需启动”,当有连接到达时才启动对应的 .service
是systemd 的一种优化设计,.socket负责监听网络接口或者本地套接字,当有请求时,再由.socket文件触发.service文件启动服务,好处是服务可以不用一致后台运行,有请求时再启动,可以节省系统资源
.mount / .automount
- .mount / .automount:文件系统挂载点,如果想让有个硬盘分区或者网络存储,再系统启动时,自动挂载再指定目录,就可以用此来配置
.target
- .target:一组单元的集合。管理启动流程的总开关(管依赖)
把一系列相关的服务和其他单元组织在一起,当前target启动后,意味者系统进入了该状态,也意味着它所包含和依赖的其他服务都已经启动好了
.timer
- .timer:用于定时任务,替代传统的 cron
linux - crontab定时周期循环任务
.path
- .path:基于文件或目录的变化来激活其他服务。
单元文件生效
- 改了配置单元文件之后,需要执行重加载
sudosystemctl daemon-reload核心工具 : systemctl
- 启动/停止/重启/重载配置/查看状态
sudosystemctl start docker.service# 启动sudosystemctl stop docker.service# 停止sudosystemctl restart docker.service# 先停后启sudosystemctl reload docker.service# 不中断服务,重载配置(如果支持)sudosystemctl status docker.service# 详细信息,最重要!会显示日志片段和是否激活- 启用/禁用开机自启
sudosystemctlenabledocker.service# 创建符号链接到 .wants 目录sudosystemctl disable docker.service# 移除符号链接sudosystemctl is-enabled nginx.service# 检查是否启用- 查看所有单元/正在运行的服务
systemctl list-units --type=service systemctl list-units --type=service --state=running- 查看系统状态和最近日志
systemctl status# 查看详细启动日志sudojournalctl -u docker.service# 查看 nginx 服务的所有日志sudojournalctl -u docker.service -f# 实时追踪(-f follow)sudojournalctl -u docker.service --since todaysudojournalctl -p err -b# 查看本次启动的所有错误日志