news 2026/2/5 13:32:03

【Linux系统】系统初始化管理 systemd | service

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux系统】系统初始化管理 systemd | service

系统初始化管理

系统初始化守护进程

  • 区分使用的时哪一种
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# 查看本次启动的所有错误日志

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 8:43:21

如何通过生成式引擎优化(GEO)提升品牌在AI搜索中的可见度?

随着AI技术的不断发展,品牌营销正在经历一场深刻的转型。传统的搜索引擎优化(SEO)方法已经逐渐失去其效果,而AI驱动的搜索引擎和生成式引擎优化(GEO)正在成为品牌提升曝光率和转化率的关键。本文将重点介绍…

作者头像 李华
网站建设 2026/2/3 3:21:41

Java Map 集合深度笔记(理论篇)

Map 是 Java 集合框架中双列集合的核心接口,隶属于 java.util 包,与 Collection 接口(单列集合)并列,专门用于存储 “键(Key)- 值(Value)” 映射关系。相较于单列集合&am…

作者头像 李华
网站建设 2026/2/6 8:36:23

Java Collection 集合进阶知识笔记

Collection 是 Java 集合框架中单列集合的顶级接口,隶属于 java.util 包,与 Map 接口并列,定义了所有单列集合的通用行为,其核心子接口包括 List(有序可重复)、Set(无序不可重复)、Q…

作者头像 李华
网站建设 2026/2/5 22:14:45

C++11(五):类型转换全解析

目录 c的类型转换 1. C语言中的类型转换 2. 为什么c需要四种类型转换 3. c强制类型转换解析 3.1 static_cast 3.2 reinterpret_cast 3.3 const_cast 3.4 dynamic_cast 4. RTTI c的类型转换 c语言和c是一个强类型的语言,也就是变量和变量之间有明显的类型的…

作者头像 李华
网站建设 2026/2/6 8:02:19

LeetCode---环形链表 II

LeetCode---环形链表 II 首先要解决这个题,我们先要明白我们要考虑的情况 如果链表没有环,则直接返回null ListNode fasthead;ListNode slowhead;while(fast!null&&fast.next!null){fastfast.next.next;slowslow.next;if(fastslow){break;}} …

作者头像 李华
网站建设 2026/2/5 16:23:53

打卡信奥刷题(2514)用C++实现信奥 P1950 长方形

P1950 长方形 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形。 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为 n,mn,mn,m。小明将这张纸看成是由nmn\times mnm个格子组成,在剪的时…

作者头像 李华