程序崩了没人盯!学会 systemd 自制服务,异常自动重启 + 开机自启。
Linux 服务管理windows 开机的时候有些程序自动启动了。命令行运行services.mscsystemd 介绍基本概念CentOS 7 使用 Systemd 引导系统启动速度最快所有进程无论有无依赖关系则都是并行启动很多时候进程没有真正启动而是只有一个信号或者说是标记而已在真正利用的时候才会真正启动。Systemd为了解决上文的问题而诞生。它的目标是为系统的启动和管理提供一套完整的解决方案。系统引导程序用户空间systemdpid为1内核空间kthreaddpid为2服务从业务角度来称呼例如 web 服务数据库服务。守护进程daemonweb 服务器对外提供 web 服务由 web 相关的进程提供支持。以web服务为例服务web服务守护进程httpd例如# 安装软件包[xiaomacentos7 ~10:46:51]$sudoyuminstall-yhttpd# 启动服务[xiaomacentos7 ~11:15:26]$sudosystemctl start httpd# 查看进程[xiaomacentos7 ~11:16:05]$ps-Chttpd f PID TTY STAT TIME COMMAND5154? Ss0:00 /usr/sbin/httpd-DFOREGROUND5156? S0:00\_ /usr/sbin/httpd-DFOREGROUND5157? S0:00\_ /usr/sbin/httpd-DFOREGROUND5158? S0:00\_ /usr/sbin/httpd-DFOREGROUND5159? S0:00\_ /usr/sbin/httpd-DFOREGROUND5160? S0:00\_ /usr/sbin/httpd-DFOREGROUNDhttpd 服务对应的守护进程是18090、18095…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 ~11:31:11]# systemctl list-unitssystemctl list-units命令输出说明UNIT服务单元名称。LOADsystemd是否正确解析了单元的配置并将该单元加载到内存中。ACTIVE单元的高级别激活状态。此信息表明单元是否已成功启动。SUB单元的低级别激活状态。此信息指示有关该单元的更多详细信息。信息视单元类型、 状态以及单元的执行方式而异。DESCRIPTION单元的简短描述。# -t选项查看特定类型unit 清单[xiaomacentos7 ~11:32:12]$ 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 anchorforD LOADReflects 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[rootcentos7 ~11:31:37]# systemctl list-units --type service --all# 列出系统中所有unit包括未loaded的unit[rootcentos7 ~11:33:15]# systemctl list-unit-files# 查看失败的服务[rootcentos7 ~11:34:11]# systemctl --failed --type service查看单个 unit 信息[xiaomacentos7 ~12:57:01]$ 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 三2026-07-2212:55:52 CST;37min ago Docs: man:sshd(8)man:sshd_config(5)Main PID:1207(sshd)Tasks:1CGroup: /system.slice/sshd.service └─1207 /usr/sbin/sshd-D........关键字概述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 ~14:24:22]# systemctl stop sshd.service# 客户端连接测试[rootcentos7 ~14:24:47]# systemctl xiaomacentos7 hostname# 启动服务[rootcentos7 ~14:25:23]# systemctl start sshd.service# 客户端连接测试[rootcentos7 ~14:26:17]# ssh xiaomacentos7 hostname# 重启服务相当于stop再start[rootcentos7 ~14:27:28]# systemctl restart sshd.service# 一般用于配置文件变动后重新加载[rootcentos7 ~14:28:16]# systemctl reload sshd.service# 重新加载服务服务对应的主进程不会重启只会重新加载一次配置文件。# 禁止服务开机自启[rootcentos7 ~14:29:03]# systemctl disable sshd.service[rootcentos7 ~14:29:46]# systemctl is-enabled sshddisabled# 重启系统验证[rootcentos7 ~14:30:15]# reboot# 设置服务开机自启[rootcentos7 ~14:31:02]# systemctl enable sshd.service[rootcentos7 ~14:31:30]# systemctl is-enabled sshdenabled# 重启系统验证[rootcentos7 ~14:32:16]# reboot# 禁用服务服务被禁用后将无法start因为服务的配置文件指向/dev/null[rootcentos7 ~14:33:16]# systemctl mask sshd.service# 取消禁用[rootcentos7 ~14:33:45]# systemctl unmask sshd.serviceunit 配置文件unit 配置文件存放在多个位置/etc /systemd/system/unit.service优先生效。一般是管理员自定义的配置。/usr/lib /systemd/system/unit.service其次生效。软件包自带的默认配置。配置文件说明示例单元文件/usr/lib/systemd/system/sshd.service说明# 标识该部分为 Unit 配置用于描述服务的基本信息、依赖关系等。 [Unit] # 服务的描述信息说明这是 OpenSSH 服务器守护进程便于管理员识别服务用途。 DescriptionOpenSSH server daemon # 指定服务的文档路径这里指向 sshd 命令的手册页man 8 sshd和配置文件的手册页man 5 sshd_config方便用户查阅帮助。 Documentationman:sshd(8) man:sshd_config(5) # 定义服务的启动顺序sshd 服务必须在 network.target网络服务就绪和 sshd-keygen.serviceSSH 密钥生成服务之后启动确保依赖的资源已准备好。 Afternetwork.target sshd-keygen.service # 表示 sshd 服务 希望 sshd-keygen.service 运行但不是强制依赖。如果 sshd-keygen.service 启动失败sshd 仍会尝试启动通常用于生成初始 SSH 密钥若密钥已存在则不影响。 Wantssshd-keygen.service # 标识该部分为 Service 配置用于定义服务的启动方式、执行命令、重启策略等。 [Service] # 定义服务的类型为 notify表示服务启动后会主动通知 systemd 自己已就绪通过 sd_notify() 函数systemd 会等待这个通知后再继续后续流程确保服务真正可用。 Typenotify # 指定环境变量文件的路径/etc/sysconfig/sshd 中通常定义 OPTIONS 等变量如额外的 sshd 启动参数这些变量会被后续的 ExecStart 引用。 EnvironmentFile/etc/sysconfig/sshd # 服务启动时执行的命令 ExecStart/usr/sbin/sshd -D $OPTIONS # /usr/sbin/sshdsshd 守护进程的可执行文件路径。 # -D表示 sshd 以非守护进程模式运行前台运行因为 systemd 通常管理前台进程便于监控。 # $OPTIONS引用 EnvironmentFile 中定义的额外参数如 -p 2222 指定端口。 # 服务重载配置时执行的命令 ExecReload/bin/kill -HUP $MAINPID # kill -HUP 发送 SIGHUP 信号给 sshd 主进程使其重新加载配置文件无需重启服务。 # $MAINPID 是 systemd 自动维护的服务主进程 ID。 # 定义服务停止时的杀死模式process 表示只杀死服务的主进程sshd 主进程其子进程如已建立的 SSH 连接会被保留避免强制中断现有连接。 KillModeprocess # 定义服务的重启策略当服务因非正常退出如崩溃、信号终止时systemd 会自动重启服务正常退出如主动停止则不重启。 Restarton-failure # 服务重启前的等待时间这里设置为 42 秒避免频繁重启导致资源耗尽。 RestartSec42s # 标识该部分为 Install 配置用于定义服务如何被 启用即系统启动时自动运行。 [Install] # 表示当系统启动到 multi-user.target多用户命令行模式非图形界面时该服务会被自动启动。这是服务器的默认运行级别确保 SSH 服务在系统启动后可用。 WantedBymulti-user.target开发一个 study 服务开发 studyd 服务主程序 study脚本说明这是一个无限循环的脚本每 5 秒会向/var/log/study.log文件中追加一行包含当前时间的日志内容为[时间]: IM studying [ Linux ]。[rootcentos7 ~16:15:19]# vim /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 31 10:00:00 CST 2025: IM studying [ Linux ]。echo$DATE: IM studying [ Linux ]/var/log/study.log# 让脚本暂停执行 5 秒sleep 命令用于延迟单位默认为秒避免循环执行过快。sleep5# 循环体的结束标记与前面的 while 和 do 配合标志着一次循环的结束。done[rootcentos7 ~16:24:17]# chmod x /usr/local/bin/study创建 studyd 服务单元文件# 参考 sshd.service[rootcentos7 ~16:25:51]# cp /usr/lib/systemd/system/sshd.service \/etc/systemd/system/studyd.service[rootcentos7 ~16:26:32]# vim /etc/systemd/system/studyd.service[Unit]Descriptionstudy server daemon[Service]ExecStart/usr/local/bin/study[Install]WantedBymulti-user.target# 通知 systemd 读取 unit 变化[rootcentos7 ~15:02:23]# systemctl daemon-reload# 启用并启动服务[rootcentos7 ~15:02:34]# systemctl enable studyd --now# 查看服务状态[rootcentos7 ~15:03:09]# systemctl status studyd● studyd.service - OpenSSH server daemon Loaded: loaded(/etc/systemd/system/studyd.service;enabled;vendor preset: disabled)Active: active(running)since 三2026-07-2215:03:09 CST;19s ago Main PID:4130(study)Tasks:2CGroup: /system.slice/studyd.service ├─4130 /bin/bash /usr/local/bin/study └─4150sleep57月2215:03:09 centos7.xiaoma.cloud systemd[1]: Started OpenSSH server daemon.验证日志[rootcentos7 ~15:35:25]# tail -f /var/log/study.log2026年 07月22日 星期三15:34:46 CST: IM studying [ Linux ] 2026年 07月 22日 星期三 15:34:51 CST: IM studying[Linux]2026年 07月22日 星期三15:34:56 CST: IM studying [ Linux ] 2026年 07月 22日 星期三 15:35:01 CST: IM studying[Linux]2026年 07月22日 星期三15:35:06 CST: IM studying [ Linux ] 2026年 07月 22日 星期三 15:35:11 CST: IM studying[Linux]......

相关新闻

机械键盘客制化:Ela60套件与Cream轴体的声学优化实践

机械键盘客制化:Ela60套件与Cream轴体的声学优化实践

1. 项目概述:机械键盘客制化与打字音美学在机械键盘玩家圈子里,追求独特手感与悦耳打字音早已成为一种艺术形式。今天要分享的这套组合——Ela60客制化套件搭配Cream轴体和SW Nimubs键帽,正是近期圈内热议的"退烧级"配置。作为一名…

2026/7/23 4:42:00 阅读更多 →
彩虹氚气管的发光颜色会随着时间的推移而变化吗?

彩虹氚气管的发光颜色会随着时间的推移而变化吗?

核心结论先讲清楚(针对波尔 NM9032C-S2C-GR2 彩虹氚气管)发光的基础色相不会改变:橙色依旧是橙色、蓝色依旧是蓝色、绿色依旧是绿色,不会出现蓝管慢慢变成紫色、橙管变黄这类色移。 但是会产生两种「视觉上的观感变化」&#xff0…

2026/7/23 4:42:00 阅读更多 →
为什么团队接入 Hermes 后联调反而慢了?先看懂上下文切分逻辑

为什么团队接入 Hermes 后联调反而慢了?先看懂上下文切分逻辑

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&#…

2026/7/23 4:41:00 阅读更多 →

最新新闻

Connecting AI to Decisions with the Palantir Ontology——通过Palantir Ontology将AI连接到决策

Connecting AI to Decisions with the Palantir Ontology——通过Palantir Ontology将AI连接到决策

核心前提 每个决策由三个基本要素构成: 数据(Data) —— 用于决策的信息 逻辑(Logic) —— 评估决策的过程 行动(Action) —— 决策的执行 Ontology将这三大要素整合为一个可扩展、动态、协…

2026/7/23 5:19:16 阅读更多 →
C++实时语音翻译实战:基于Azure Speech SDK的完整开发指南

C++实时语音翻译实战:基于Azure Speech SDK的完整开发指南

1. 项目概述:为什么选择Azure语音SDK做C语音翻译?如果你正在用C开发一个需要实时语音翻译的应用,比如一个国际会议的同传系统、一个支持多语言的游戏语音聊天,或者一个跨语言的客服机器人,那你大概率会面临一个核心难题…

2026/7/23 5:19:16 阅读更多 →
C++算法竞赛入门:从环境搭建到核心语法与实战指南

C++算法竞赛入门:从环境搭建到核心语法与实战指南

1. 从零到一:为什么算法竞赛值得你投入时间 如果你点开了这篇文章,大概率是刚接触编程不久,或者对“算法竞赛”这四个字感到好奇,甚至有点望而生畏。别担心,几年前的我也是这么过来的。很多人一听到“竞赛”&#xff…

2026/7/23 5:19:16 阅读更多 →
Magicodes.IE.IO:XLSX I/O 管线:数据如何进出工作簿

Magicodes.IE.IO:XLSX I/O 管线:数据如何进出工作簿

一区分很重要。把组件称为“Excel 引擎”很容易让读者期待一个可随机编辑、可计算公式、可保留全部工作簿状态的对象模型。本文讨论的是另一类问题:在文件、HTTP 响应或上传流上,怎样可靠地读写 XLSX 数据。 导出:对象怎样变成 ZIP 输出 高层…

2026/7/23 5:19:16 阅读更多 →
TI Hercules GIO模块深度解析:中断、低功耗与调试模式实战

TI Hercules GIO模块深度解析:中断、低功耗与调试模式实战

1. 项目概述与GIO模块核心价值在嵌入式开发领域,通用输入/输出(GPIO)接口是连接微控制器与外部世界的“数字神经末梢”。无论是点亮一个LED、读取一个按键状态,还是模拟一个简单的通信时序,都离不开对GPIO的精准控制。…

2026/7/23 5:19:16 阅读更多 →
JavaScript与D3.js实现树状图数据可视化

JavaScript与D3.js实现树状图数据可视化

1. 树状图基础概念与应用场景树状图(Tree Diagram)是一种常见的数据可视化形式,用于展示具有层级关系的数据结构。在Web前端开发中,使用JavaScript实现树状图可以帮助我们直观地呈现组织结构、文件目录、产品分类等层级数据。这种…

2026/7/23 5:18:15 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻