当前位置: 首页 > news >正文

别再手动开机启动!Systemd 一键搞定所有后台服务

在 Windows 系统中,我们可以通过services.msc图形界面管理系统服务、设置程序开机自启。而在 Linux(CentOS 7 及以上)系统中,官方默认采用Systemd作为系统初始化与服务管理框架,替代了传统的 SysVinit,实现了并行启动、按需加载、统一管理,极大提升了系统开机速度与服务稳定性。

文章目录

    • 一、Systemd 核心概述
      • 1.设计初衷
      • 2.系统核心进程
      • 3.服务与守护进程(Daemon)核心概念
    • 二、Systemd 整体架构
    • 三、Systemd Unit 单元类型
    • 四、Unit 单元查询命令
      • 1.基础单元列表查询
      • 2.输出字段释义
      • 3.查看单个服务详细状态
      • 4.服务状态核心关键字
        • 运行状态
        • 开机自启状态
    • 五、Systemctl 服务管控核心命令
      • 实操示例
    • 六、unit单元配置文件详解
      • 1.配置文件优先级
      • 2.标准服务配置文件结构(sshd 示例)
        • (1)[ Unit ] 通用配置段
        • (2)[ Service ] 服务核心配置段
        • (3)[ Install ] 开机安装配置段
    • 七、实战:自定义开发 study服务
      • 步骤1:编写服务执行脚本
      • 步骤2:创建自定义服务单元文件
      • 步骤3:重载配置并启动服务
      • 步骤4:验证服务日志
    • 八、总结

一、Systemd 核心概述

1.设计初衷

传统 Linux 初始化机制为串行启动,进程依赖复杂、开机耗时长、服务管理零散。Systemd应运而生,旨在为 Linux 系统提供一套统一、高效、完整的系统启动与服务管理解决方案

CentOS 7 及以上版本全面基于 Systemd 引导系统,核心特性:

  • 并行启动机制:无强依赖的进程并行初始化,大幅提速开机

  • 按需懒加载:进程初始仅做标记注册,真正被调用时才完整启动,节省系统资源

  • 统一管控体系:整合系统服务、挂载、定时任务、设备管理等所有系统资源

2.系统核心进程

Systemd 是用户空间的首个核心进程,接管系统所有资源调度:

  • 用户空间systemd,PID = 1,系统所有进程的父进程

  • 内核空间kthreadd,PID = 2,负责内核线程调度

3.服务与守护进程(Daemon)核心概念

为方便理解,区分两个核心概念:

  • 服务(Service):业务层面的抽象概念,对外提供的功能能力(如 Web 服务、数据库服务)

  • 守护进程(Daemon):后台常驻进程,是支撑服务运行的具体程序载体

通俗示例类比:

  • 业务:Web 服务|守护进程:httpd

  • 业务:云计算培训服务|守护进程:授课老师、课程顾问、运维支撑人员

实操演示(HTTPD 服务):

# 安装 Web 服务软件yuminstall-yhttpd# 启动 httpd 服务systemctl start httpd# 查看服务守护进程ps-Chttpd f

输出结果可清晰看到httpd系列后台常驻进程,即为支撑 Web 服务的守护进程。

二、Systemd 整体架构

Systemd 架构分为两层,分工明确、解耦清晰:

  1. 底层守护进程systemd,后台常驻,负责所有系统单元的调度、启动、监控、重启

  2. 上层操作工具systemctl,用户交互命令行工具,提供所有服务管理操作入口

三、Systemd Unit 单元类型

Systemd 将系统所有可管理资源抽象为Unit(单元),不同后缀对应不同资源类型,是 Systemd 管理的核心对象。

单元类型文件后缀核心作用
Service.service系统服务管理(最常用,如 sshd、httpd)
Socket.socket进程间通信 Socket 文件管理
Target.target模拟系统运行级别,用于批量管理服务
Timer.timer系统定时任务管理(替代 crontab)
Device.device内核识别的硬件设备管理
Mount.mount文件系统挂载点管理
Automount.automount文件系统自动挂载配置
Path.path监控文件变动,触发服务启动
Swap.swap系统交换分区管理
Snapshot.snapshot系统快照管理
Slice.slice系统资源配额与管控

四、Unit 单元查询命令

1.基础单元列表查询

# 查看已加载的所有单元systemctl list-units# 仅查看定时任务类型单元systemctl list-units-ttimer# 查看所有服务单元(包含活跃/非活跃)systemctl list-units--typeservice--all# 查看系统所有已安装单元文件(包含未加载)systemctl list-unit-files# 查看启动失败的服务systemctl--failed--typeservice

2.输出字段释义

  • UNIT:单元名称

  • LOAD:单元配置是否成功加载解析

  • ACTIVE:单元高级运行状态(总体状态)

  • SUB:单元细分运行状态(详细状态)

  • DESCRIPTION:单元功能描述

3.查看单个服务详细状态

systemctl status sshd.service

4.服务状态核心关键字

运行状态
  • loaded:配置文件解析完成,已加载至内存

  • active(running):服务正常运行中

  • active(exited):一次性任务执行完成,状态正常

  • active(waiting):服务就绪,等待触发事件

  • inactive:服务未运行/已停止

开机自启状态
  • enabled:开机自动启动

  • disabled:开机不自动启动

  • static:无法手动启动,依赖其他单元触发

五、Systemctl 服务管控核心命令

所有服务操作统一通过systemctl实现,语法统一、简洁高效。

实操示例

# 停止 SSH 服务systemctl stop sshd.service# 启动 SSH 服务systemctl start sshd.service# 重启服务(业务中断,适用于程序更新)systemctl restart sshd.service# 重新加载配置(业务不中断,适用于配置修改)systemctl reload sshd.service# 取消开机自启systemctl disable sshd.service# 重启系统验证reboot# 开启开机自启systemctlenablesshd.service# 锁定禁用服务(彻底禁止启动)systemctl mask sshd.service# 取消禁用systemctl unmask sshd.service

六、unit单元配置文件详解

1.配置文件优先级

unit 服务配置文件分为两个目录,自定义配置优先级高于系统默认配置

  • /etc/systemd/system/:管理员自定义服务,优先级最高

  • /usr/lib/systemd/system/:软件包自带默认服务配置

2.标准服务配置文件结构(sshd 示例)

所有 .service 文件统一分为[Unit][Service][Install]三大模块。

(1)[ Unit ] 通用配置段

定义服务描述、依赖关系、启动顺序

# 标识该部分为 Unit 配置,用于描述服务的基本信息、依赖关系等。 [Unit] # 服务的描述信息,说明这是 "OpenSSH 服务器守护进程",便于管理员识别服务用途。 Description=OpenSSH server daemon # 指定服务的文档路径,这里指向 sshd 命令的手册页(man 8 sshd)和配置文件的手册页(man 5 sshd_config),方便用户查阅帮助。 Documentation=man:sshd(8) man:sshd_config(5) # 定义服务的启动顺序:sshd 服务必须在 network.target(网络服务就绪)和 sshd-keygen.service(SSH 密钥生成服务)之后启动,确保依赖的资源已准备好。 After=network.target sshd-keygen.service # 表示 sshd 服务 "希望" sshd-keygen.service 运行(但不是强制依赖)。如果 sshd-keygen.service 启动失败,sshd 仍会尝试启动(通常用于生成初始 SSH 密钥,若密钥已存在则不影响)。 Wants=sshd-keygen.service
(2)[ Service ] 服务核心配置段

定义服务启动命令、运行模式、重启策略、进程管控规则

# 标识该部分为 Service 配置,用于定义服务的启动方式、执行命令、重启策略等。 [Service] # 定义服务的类型为 notify:表示服务启动后会主动通知 systemd 自己已就绪(通过 sd_notify() 函数),systemd 会等待这个通知后再继续后续流程,确保服务真正可用。 Type=notify # 指定环境变量文件的路径,/etc/sysconfig/sshd 中通常定义 OPTIONS 等变量(如额外的 sshd 启动参数),这些变量会被后续的 ExecStart 引用。 EnvironmentFile=/etc/sysconfig/sshd # 服务启动时执行的命令: ExecStart=/usr/sbin/sshd -D $OPTIONS # /usr/sbin/sshd:sshd 守护进程的可执行文件路径。 # -D:表示 sshd 以非守护进程模式运行(前台运行),因为 systemd 通常管理前台进程,便于监控。 # $OPTIONS:引用 EnvironmentFile 中定义的额外参数(如 -p 2222 指定端口)。 # 服务重载配置时执行的命令: ExecReload=/bin/kill -HUP $MAINPID # kill -HUP 发送 SIGHUP 信号给 sshd 主进程,使其重新加载配置文件(无需重启服务)。 # $MAINPID 是 systemd 自动维护的服务主进程 ID。 # 定义服务停止时的杀死模式:process 表示只杀死服务的主进程(sshd 主进程),其子进程(如已建立的 SSH 连接)会被保留(避免强制中断现有连接)。 KillMode=process # 定义服务的重启策略:当服务因非正常退出(如崩溃、信号终止)时,systemd 会自动重启服务;正常退出(如主动停止)则不重启。 Restart=on-failure # 服务重启前的等待时间,这里设置为 42 秒,避免频繁重启导致资源耗尽。 RestartSec=42s
(3)[ Install ] 开机安装配置段

定义服务开机启动归属级别

# 标识该部分为 Install 配置,用于定义服务如何被 "启用"(即系统启动时自动运行)。 [Install] # 表示当系统启动到 multi-user.target(多用户命令行模式,非图形界面)时,该服务会被自动启动。这是服务器的默认运行级别,确保 SSH 服务在系统启动后可用。 WantedBy=multi-user.target

七、实战:自定义开发 study服务

本章手动开发一个study自定义守护服务,实现每5秒自动写入日志的常驻后台功能。

步骤1:编写服务执行脚本

# 编写后台执行脚本vim/usr/local/bin/study

脚本内容:

#!/bin/bash# 第一行内容是脚本的 "解释器声明"(shebang),指定该脚本使用 /bin/bash 作为解释器执行。系统会根据这一行找到对应的 shell 程序来解析后续命令。# 启动一个无限循环:while 是循环关键字,true 是一个永远为真的条件,因此这个循环会一直执行下去,直到被外部终止(如 Ctrl+C)。whiletrue# 循环体的开始标记,do 和后面的 done 之间的内容是循环中重复执行的命令。do# 执行 date 命令(获取当前系统时间),并通过 $(...) 捕获其输出,将结果赋值给变量 DATE。DATE=$(date)# echo 命令输出字符串,其中 $DATE 会被替换为变量的值# >> 是追加重定向符号,将输出内容追加到 /var/log/study.log 文件中# 最终输出内容类似 Fri Oct 31 10:00:00 CST 2025: I'M studying [ Linux ]。echo"$DATE: I'M studying [ Linux ]">>/var/log/study.log# 让脚本暂停执行 5 秒(sleep 命令用于延迟,单位默认为秒),避免循环执行过快。sleep5# 循环体的结束标记,与前面的 while 和 do 配合,标志着一次循环的结束。done

赋予脚本执行权限:

chmod+x /usr/local/bin/study

步骤2:创建自定义服务单元文件

# 复制标准服务模板cp/usr/lib/systemd/system/sshd.service /etc/systemd/system/studyd.service# 编辑自定义服务配置vim/etc/systemd/system/study.service

精简配置内容:

[Unit] Description=study server daemon [Service] ExecStart=/usr/local/bin/study [Install] WantedBy=multi-user.target

步骤3:重载配置并启动服务

# 重载 systemd 配置,识别新服务systemctl daemon-reload# 开机自启并立即启动服务systemctlenablestudy--now# 查看服务运行状态systemctl status study

步骤4:验证服务日志

# 实时查看日志输出tail-f/var/log/study.log

日志会每5秒自动刷新,证明自定义服务常驻后台运行成功。

八、总结

Systemd 作为 CentOS 7+ 主流的系统与服务管理框架,统一了 Linux 系统的资源管控方式,具备启动快、管理统一、稳定性高、可自定义扩展的优势。熟练掌握systemctl命令、Unit 单元机制、服务配置文件编写、自定义服务开发,是 Linux 运维、服务部署、程序常驻后台的核心必备技能。

http://www.jsqmd.com/news/1243910/

相关文章:

  • extended_text核心功能详解:从特殊文本到自定义背景,一篇搞定所有高级用法
  • 武汉女生适合读什么中职专业 护理 / 高铁 / 美术设计稳定好就业 - 湖北升学规划
  • 深圳长途搬家公司:长途搬家+家电打包避坑指南,2026年跨省搬迁注意事项 - szxybj
  • 2026年保定赵掌柜回收黄金首饰,金条金币铂金回收,竞秀区向阳南大街489号赵掌柜二奢按实时金价结算到手不扣费(185-3117-2838) - 赵掌柜二奢
  • Skills3:如何通过智能技能系统提升开发者300%的工作效率
  • 2026年深圳搬运公司:精密设备搬运+实验室搬迁流程步骤,避免损坏的避坑技巧 - szxybj
  • 拒玩虚的!北京行贿罪案件辩护律师_北京受贿罪律师top5靠谱排行(2026年7月22日最新):专业能力与案例实绩对比 - 奋斗者888
  • Terraspace模块化开发实战:3个案例教你构建可复用的基础设施代码
  • 北京汽车养护服务行业2026 GEO优化公司新**丨生成式引擎优化服务商头部**深度解析 - 企业新闻快传
  • 终极指南:如何用700欧元打造你的智能割草机器人 - OpenMower完整教程
  • 格拉苏蒂中国**售后服务中心|全新热线和维修地址**信息公示(2026年7月更新) - 亨得利官方服务中心
  • stablecoin-evm在Celo网络的部署指南:Fee Adapter与特殊实现
  • NocoBase开发实战:从零构建你的第一个AI+无代码业务系统
  • AI生成商业摄影级图片的7个致命误区:90%设计师踩坑的隐藏雷区,现在规避还来得及
  • 2026 年当下,江陵知名的粮仓聚氨酯保温优质厂家怎么联系,揭秘:粮仓保温的秘密武器,如何让粮食保鲜十年? - 实业推荐官【官方】
  • 2026年7月最新!格拉苏蒂金华**售后网点地址及全国统一服务热线 - 亨得利官方服务中心
  • 2026安义县红木家具回收公司哪家好,工程废旧回收公司推荐|南昌卓浩物质回收中心口碑推荐 - geo88
  • RTX Remix终极指南:7个简单技巧让经典游戏重制焕然一新
  • PCB制造中自动在线AXI射线检查设备的兴起
  • 微型PCB拼板-单板最小尺寸如何左右拼板选型
  • 关于屋面坡度相关规定
  • 排水抢险车智慧运维系统方案
  • 2026年7月亲身到店体验海口亨得利**名表服务中心|详细地址与24小时售后电话 - 亨得利官方博客
  • Typst快速入门指南:5分钟掌握现代文档排版系统
  • LambdaWorks数学基础:椭圆曲线与多项式承诺方案
  • 如何通过Aviator Predictor Bot提升游戏胜率:从种子预测到精准决策的完整指南
  • sherpa-onnx 本地语音AI推理引擎架构深度解析:跨平台边缘计算新范式
  • 5分钟深度解析:exifr如何成为JavaScript元数据提取的性能王者
  • 2026年7月亲身探访徐州亨得利**名表服务中心|网点地址与售后服务热线 - 亨得利官方博客
  • 武汉小语种高考靠谱高中 武汉思久高级中学日语高考低分冲本科 - 湖北升学规划