Linux 服务管理:从 systemd 基础到自定义服务开发实战
Linux 服务管理从 systemd 基础到自定义服务开发实战Linux 服务管理windows 开机的时候有些程序自动启动了。命令行运行services.mscsystemd 介绍基本概念CentOS 7 使用 Systemd 引导系统启动速度最快所有进程无论有无依赖关系则都是并行启动很多时候进程没有真正启动而是只有一个信号或者说是标记而已在真正利用的时候才会真正启动。Systemd为了解决上文的问题而诞生。它的目标是为系统的启动和管理提供一套完整的解决方案。系统引导程序用户空间systemdpid为1内核空间kthreaddpid为2服务从业务角度来称呼例如 web 服务数据库服务。守护进程daemonweb 服务器对外提供 web 服务由 web 相关的进程提供支持。以web服务为例服务web服务守护进程httpd万和提供培训服务服务万培训云计算守护进程课程顾问、代课老师、就业老师等。例如# 安装软件包[rootcentos7 ~16:55:33]# yum install -y httpd# 启动服务[rootcentos7 ~16:57:01]# systemctl start httpd# 查看进程[rootcentos7 ~16:57:05]# ps -C httpd fPID TTY STAT TIME COMMAND2212? Ss0:00 /usr/sbin/httpd-DFOREGROUND2219? S0:00\_ /usr/sbin/httpd-DFOREGROUND2220? S0:00\_ /usr/sbin/httpd-DFOREGROUND2221? S0:00\_ /usr/sbin/httpd-DFOREGROUND2222? S0:00\_ /usr/sbin/httpd-DFOREGROUND2223? S0:00\_ /usr/sbin/httpd-DFOREGROUNDhttpd 服务对应的守护进程是2212、2219…systemd 架构守护进程systemd由守护进程干活。工具systemctl提供给用户要、用来根机器交互的工具。unit 类型systemctl 命令用于管理不同类型的系统对象这些对象称之为units。Service unit用于定义系统服务文件扩展名为**.service**例如httpd.serviceSocket unit用于标识进程间通信用的 socket文件文件扩展名为.socketTarget unit用于模拟实现“运行级别”文件扩展名为.targetTimer unit用于管理计划任务文件扩展名为.timerDevice unit用于定义内核识别的设备文件扩展名为.deviceMount unit用于定义文件系统挂载点文件扩展名为.mountSnapshot unit管理系统快照文件扩展名为.snapshotSwap unit用于标识swap设备文件扩展名为.swapAutomount unit文件系统的自动挂载点文件扩展名为.automountPath unit用于根据文件系统上特定对象的变化来启动其他服务文件扩展名为.pathSlice unit用于资源管理文件扩展名为.slice查看 unit 列表信息# 列出状态为loaded units[rootcentos7 ~]# systemctl list-unitssystemctl list-units命令输出说明UNIT服务单元名称。LOADsystemd是否正确解析了单元的配置并将该单元加载到内存中。ACTIVE单元的高级别激活状态。此信息表明单元是否已成功启动。SUB单元的低级别激活状态。此信息指示有关该单元的更多详细信息。信息视单元类型、 状态以及单元的执行方式而异。DESCRIPTION单元的简短描述。# -t选项查看特定类型unit 清单[myzcentos7 ~16:59:13]$ systemctl list-units-ttimer UNIT LOAD ACTIVE SUB DESCRIPTION systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories unbound-anchor.timer loaded active waiting daily update of the root trust anchorforLOADReflects whether the unit definition was properly loaded. ACTIVEThe high-level unit activation state, i.e. generalization of SUB. SUBThe low-level unit activation state, values depend on unit type.2loadedunitslisted. Pass--allto see loaded but inactive units, too. To show all installed unit files usesystemctl list-unit-files.# 列出类型为service状态为active和inactive unit[myzcentos7 ~]# systemctl list-units --type service --all# 列出系统中所有unit包括未loaded的unit[myzcentos7 ~]# systemctl list-unit-files# 查看失败的服务[myzcentos7 ~]# systemctl --failed --type service查看单个 unit 信息[myzcentos7 ~17:00:35]$ systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded(/usr/lib/systemd/system/sshd.service;enabled;vendor preset: enabled)Active: active(running)since Wed2026-07-2216:51:24 CST;9min ago Docs: man:sshd(8)man:sshd_config(5)Main PID:1209(sshd)Tasks:1CGroup: /system.slice/sshd.service └─1209 /usr/sbin/sshd-DJul2216:51:24 centos7.myz.cloud systemd[1]: Starting OpenSSH server daemon... Jul2216:51:24 centos7.myz.cloud sshd[1209]: Server listening on0.0.0.0 port22. Jul2216:51:24 centos7.myz.cloud sshd[1209]: Server listening on :: port22. Jul2216:51:24 centos7.myz.cloud systemd[1]: Started OpenSSH server daemon. Jul2216:51:39 centos7.myz.cloud sshd[1902]: Accepted passwordformyz from7.1.8.1 po...h2 Hint: Some lines were ellipsized, use-lto showinfull.关键字概述loaded单元配置文件已处理active(running)正在运行active(exited)已成功完成一次性配置active(waiting)运行中正在等待事件inactive不再运行enabled系统引导时启动disabled系统引导时不启动static无法启动依赖其他单元启动控制系统服务命令任务systemctl statusUNIT查看单元状态的详细信息。systemctl stopUNIT在运行中的系统上停止一项服务。systemctl startUNIT在运行中的系统上启动一项服务。systemctl restartUNIT在运行中的系统上重新启动一项服务。systemctl reloadUNIT重新加载运行中服务的配置文件。systemctl maskUNIT禁用服务使其无法手动启动或在系统引导时启动。systemctl unmaskUNIT使屏蔽的服务变为可用。systemctl enableUNIT将服务配置为在系统引导时启动。使用--now选项也会启动该服务。systemctl disableUNIT禁止服务在系统引导时启动。使用--now选项也会停止该服务。# 停止服务[rootcentos7 ~]# systemctl stop sshd.service# 客户端连接测试[rootcentos7 ~]# ssh myzcentos7 hostname# 启动服务[rootcentos7 ~]# systemctl start sshd.service# 客户端连接测试[rootcentos7 ~]# ssh laomacentos7 hostname# 重启服务相当于stop再start[rootcentos7 ~]# systemctl restart sshd.service# 一般用于配置文件变动后重新加载[rootcentos7 ~]# systemctl reload sshd.service# 重新加载服务服务对应的主进程不会重启只会重新加载一次配置文件。# 禁止服务开机自启[rootcentos7 ~]# systemctl disable sshd.service[rootcentos7 ~]# systemctl is-enabled sshddisabled# 重启系统验证[rootcentos7 ~]# reboot# 设置服务开机自启[rootcentos7 ~]# systemctl enable sshd.service[rootcentos7 ~]# systemctl is-enabled sshdenabled# 重启系统验证[rootcentos7 ~]# reboot# 禁用服务服务被禁用后将无法start因为服务的配置文件指向/dev/null[rootcentos7 ~]# systemctl mask sshd.service# 取消禁用[rootcentos7 ~]# systemctl unmask sshd.serviceunit 配置文件unit 配置文件存放在多个位置/etc /systemd/system/unit.service优先生效。一般是管理员自定义的配置。/usr/lib /systemd/system/unit.service其次生效。软件包自带的默认配置。配置文件说明示例单元文件/usr/lib/systemd/system/sshd.service说明# [Unit] 区域定义服务基础信息、启动依赖与顺序 [Unit] # 服务描述执行 systemctl status 时展示 DescriptionOpenSSH server daemon # 指定配套帮助文档指向命令与配置文件手册页 Documentationman:sshd(8) man:sshd_config(5) # 启动顺序当前服务在网络、SSH密钥生成服务之后启动 Afternetwork.target sshd-keygen.service # 弱依赖尝试启动 sshd-keygen.service其失败不影响本服务运行 Wantssshd-keygen.service # [Service] 区域定义服务运行参数、启停规则、进程管理 [Service] # 服务类型为 notify程序就绪后主动通知 systemd再继续后续流程 Typenotify # 加载环境变量文件文件内参数可被启动命令引用 EnvironmentFile/etc/sysconfig/sshd # 服务启动命令-D 以前台模式运行$OPTIONS 引用环境变量中的启动参数 ExecStart/usr/sbin/sshd -D $OPTIONS # 重载配置命令发送 SIGHUP 信号让主进程重新加载配置 ExecReload/bin/kill -HUP $MAINPID # 进程终止模式仅杀死服务主进程保留已建立的连接会话 KillModeprocess # 重启策略服务异常崩溃时自动重启手动停止则不重启 Restarton-failure # 服务重启延迟避免短时间内频繁重启消耗资源 RestartSec42s # [Install] 区域定义开机自启规则执行 enable 命令时生效 [Install] # 挂载至多用户运行环境系统进入该模式时自动启动本服务 WantedBymulti-user.target开发一个 study 服务开发 studyd 服务主程序 study脚本说明这是一个无限循环的脚本每 5 秒会向/var/log/study.log文件中追加一行包含当前时间的日志内容为[时间]: IM studying [ Linux ]。[myzcentos7 ~17:00:53]$sudovim/usr/local/bin/study#!/bin/bash# 第一行内容是脚本的 解释器声明shebang指定该脚本使用 /bin/bash 作为解释器执行。系统会根据这一行找到对应的 shell 程序来解析后续命令。# 启动一个无限循环while 是循环关键字true 是一个永远为真的条件因此这个循环会一直执行下去直到被外部终止如 CtrlC。whiletrue# 循环体的开始标记do 和后面的 done 之间的内容是循环中重复执行的命令。do# 执行 date 命令获取当前系统时间并通过 $(...) 捕获其输出将结果赋值给变量 DATE。DATE$(date)# echo 命令输出字符串其中 $DATE 会被替换为变量的值# 是追加重定向符号将输出内容追加到 /var/log/study.log 文件中# 最终输出内容类似 Fri Oct 22 7:00:00 CST 2026: IM studying [ Linux ]。echo$DATE: IM studying [ Linux ]/var/log/study.log# 让脚本暂停执行 5 秒sleep 命令用于延迟单位默认为秒避免循环执行过快。sleep5# 循环体的结束标记与前面的 while 和 do 配合标志着一次循环的结束。done[myzcentos7 ~17:09:51]$sudochmodx /usr/local/bin/study创建 studyd 服务单元文件# 参考 sshd.service[myzcentos7 ~17:7:00]$sudocp/usr/lib/systemd/system/sshd.service\/etc/systemd/system/studyd.service[myzcentos7 ~17:7:12]$sudovim/etc/systemd/system/studyd.service[Unit]Descriptionstudy server daemon[Service]ExecStart/usr/local/bin/study[Install]WantedBymulti-user.target# 通知 systemd 读取 unit 变化[myzcentos7 ~17:12:37]$sudosystemctl daemon-reload# 启用并启动服务[myzcentos7 ~17:13:23]$sudosystemctlenablestudyd--now# 查看服务状态[myzcentos7 ~17:13:33]$sudosystemctl status studyd ● studyd.service - study server daemon Loaded: loaded(/etc/systemd/system/studyd.service;enabled;vendor preset: disabled)Active: active(running)since Wed2026-07-2216:51:24 CST;23min ago Main PID:1211(study)CGroup: /system.slice/studyd.service ├─1211 /bin/bash /usr/local/bin/study └─2966sleep5Jul2217:13:50 centos7.myz.cloud studyd[1211]:[2026年 07月22日 星期三17:13:50 CST]s…ally Jul2217:13:55 centos7.myz.cloud studyd[1211]:[2026年 07月22日 星期三17:13:55 CST]s…ally验证日志[myzcentos7 ~17:28:20]# tail -f /var/log/study.log2026年7月22日 星期三17:28:29 CST: IM studying [ Linux ] 2026年 7月 22日 星期三 17:28:34 CST: IM studying[Linux]2026年7月22日 星期三17:28:39 CST: IM studying [ Linux ] 2026年 7月 22日 星期三 17:28:44 CST: IM studying[Linux]2026年7月22日 星期三17:28:49 CST: IM studying [ Linux ] 2026年 7月 22日 星期三 17:28:54 CST: IM studying[Linux]......tudy.log2026年7月22日 星期三17:28:29 CST: IM studying [ Linux ] 2026年 7月 22日 星期三 17:28:34 CST: IM studying[Linux]2026年7月22日 星期三17:28:39 CST: IM studying [ Linux ] 2026年 7月 22日 星期三 17:28:44 CST: IM studying[Linux]2026年7月22日 星期三17:28:49 CST: IM studying [ Linux ] 2026年 7月 22日 星期三 17:28:54 CST: IM studying[Linux]......

相关新闻

鸿蒙 ArkTS 入门实战:宝宝尿布库存的首屏状态与点击反馈

鸿蒙 ArkTS 入门实战:宝宝尿布库存的首屏状态与点击反馈

鸿蒙 ArkTS 入门实战:宝宝尿布库存的首屏状态与点击反馈 前言 宝宝尿布库存是一个基于 ArkTS 和 ArkUI 声明式 UI 的鸿蒙示例项目,入口文件位于 entry/src/main/ets/pages/Index.ets。 本文围绕项目当前已经实现的页面展开,结合 宝宝尿布库…

2026/10/13 5:18:13 阅读更多 →
开源项目商业化路径:从信任建立到价值变现的关键策略

开源项目商业化路径:从信任建立到价值变现的关键策略

开源项目能不能赚钱,关键看它到底解决了什么问题,以及这个问题是不是真的有人愿意买单。很多人一上来就纠结“开源了还怎么盈利”,但实际顺序应该是:先通过开源建立信任和流量,再考虑价值变现。 我自己参与和观察过不…

2026/10/13 5:18:13 阅读更多 →
Linux下私有化部署MrDoc文档库的实践指南

Linux下私有化部署MrDoc文档库的实践指南

1. 为什么需要私有化部署的在线文档库?在Linux环境下工作时,我们经常需要处理各种技术文档、配置说明和项目资料。传统的本地文档管理方式存在几个明显痛点:文档分散在各个目录难以查找、多人协作时版本混乱、无法随时随地访问。而公有云文档…

2026/9/27 12:00:30 阅读更多 →

最新新闻

Agent Harness工程实战:从循环到长时运行的上下文、沙箱与验证

Agent Harness工程实战:从循环到长时运行的上下文、沙箱与验证

1. 从“能跑”到“跑得久”:Harness 工程到底在解决什么第一次接触 Harness 工程这个概念,很多人会把它和“写个 Agent 循环”画等号。我一开始也这么想——不就是让模型反复调用工具、拿到结果再喂回去吗?直到我把一个能跑通 Demo 的 Agent …

2026/10/13 5:18:28 阅读更多 →
山东大学研究生答辩PPT模板:结构化母版与工程化占位符设计

山东大学研究生答辩PPT模板:结构化母版与工程化占位符设计

简介:本资源是山东大学官方风格的PPT通用模板,专为高校师生学术答辩、课程汇报、项目展示等学习与科研场景设计,兼顾学术规范性与视觉表现力。模板以校训“学无止境,气有浩然”为精神内核,融合山大历史底蕴与现代简约设…

2026/10/13 5:18:28 阅读更多 →
三菱FX系列PLC解密真相:程序备份、RTU通讯与仿真调试实战

三菱FX系列PLC解密真相:程序备份、RTU通讯与仿真调试实战

1. 先泼一盆冷水:所谓“解密”,正路根本不是破解三菱FX系列PLC解密软件,这几个字在技术群里出现的频率一直不低。隔三差五就有人问:“谁有FX3U的解密软件?”“FX3S的密码怎么读出来?”“台达全系列解密工具…

2026/10/13 5:18:28 阅读更多 →
LVS隧道模式实战:跨机房负载均衡的选型与配置

LVS隧道模式实战:跨机房负载均衡的选型与配置

1. 从一次架构选型说起:为什么最终选了LVS隧道模式几年前我做过一个跨地域的读多写少类业务,后端节点分布在三个机房,每个机房的机器性能参差不齐,流量高峰时经常出现某一组节点被打满、另一组闲着的情况。当时手头可选的负载均衡…

2026/10/13 5:18:28 阅读更多 →
AI Agent上线后运维实战:质检、自学习与排障体系搭建

AI Agent上线后运维实战:质检、自学习与排障体系搭建

1. 上线只是起点:为什么AI Agent的“运维期”比开发期更烧脑很多人做AI Agent项目,把大量精力砸在提示词调优、工具链搭建、流程编排上,觉得只要能跑通一个完整的任务闭环,就算大功告成。但真正把Agent推到线上、面对真实用户和真…

2026/10/13 5:18:28 阅读更多 →
RAG演进之路:从朴素检索到模块化架构的工程实践

RAG演进之路:从朴素检索到模块化架构的工程实践

在RAG(Retrieval-Augmented Generation,检索增强生成)这个方向上待得久一点,你会明显感受到一条演进曲线:早期大家忙着把检索和生成“拼起来跑通”,后来开始争论“检索要不要混合”“重排能不能救场”&…

2026/10/13 5:17:28 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →