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

掌握 systemd:Linux 服务管理的核心工具

1. 什么是 systemd?

  • 定义:systemd 是 Linux 系统的初始化系统(init system)和服务管理器,用于替代传统的 SysVinit
  • 核心目标
    • 加速系统启动(并行化任务)。
    • 统一管理服务、日志、挂载点等。
    • 提供依赖关系解决和资源控制。

2. 核心功能与用途

2.1 服务生命周期管理

  • 常用命令
    systemctl start nginx.service    # 启动服务
    systemctl stop nginx.service     # 停止服务
    systemctl restart nginx.service  # 重启服务
    systemctl reload nginx.service   # 重载配置(不中断服务)
    systemctl status nginx.service   # 查看状态(是否运行、日志片段)
    
  • 关键场景:部署 Web 服务器、数据库等后台服务时,快速启停和状态监控。

2.2 开机自启管理

  • 命令
    systemctl enable nginx.service   # 启用开机自启
    systemctl disable nginx.service  # 禁用开机自启
    systemctl is-enabled nginx       # 检查是否已启用
    
  • 原理:通过创建符号链接到 /etc/systemd/system 下的目标层级(如 multi-user.target.wants)。

2.3 依赖管理与并行启动

  • 优势
    • 自动解决服务依赖(如“服务 A 必须在服务 B 之后启动”)。
    • 并行启动独立服务,显著缩短系统启动时间。
  • 查看依赖
    systemctl list-dependencies nginx.service  # 显示服务的依赖树
    

2.4 故障恢复与日志

  • 自动重启崩溃服务(需在服务文件中配置):
    # 在 .service 文件中添加
    Restart=on-failure     # 仅在异常退出时重启
    RestartSec=5s          # 等待 5 秒后重启
    
  • 日志查看
    journalctl -u nginx.service      # 查看 Nginx 日志
    journalctl -u nginx --since "10分钟前"  # 时间范围过滤
    journalctl -p err -u nginx       # 仅显示错误级别日志
    

2.5 资源隔离与控制

  • 限制服务资源(示例配置):
    # 在 .service 文件中添加
    MemoryMax=512M        # 限制内存最大 512MB
    CPUQuota=50%          # 限制 CPU 占用不超过 50%
    
  • 沙盒化运行(增强安全性):
    ProtectSystem=strict     # 禁止修改系统文件
    PrivateTmp=true         # 服务使用独立临时目录
    

3. 服务管理实战

3.1 自定义服务文件

  • 示例:编写一个 Python 脚本服务
    创建 /etc/systemd/system/myapp.service
    [Unit]
    Description=My Python App
    After=network.target  # 确保网络就绪后启动[Service]
    ExecStart=/usr/bin/python3 /opt/myapp/main.py
    WorkingDirectory=/opt/myapp
    Restart=always       # 任何原因退出都重启
    User=www-data        # 指定运行用户[Install]
    WantedBy=multi-user.target  # 关联到标准多用户环境
    
  • 生效步骤
    sudo systemctl daemon-reload     # 重载配置
    sudo systemctl start myapp       # 启动服务
    

3.2 定时任务(替代 cron)

  • 使用 systemd.timer
    创建 /etc/systemd/system/backup.timer
    [Unit]
    Description=Daily Backup Timer[Timer]
    OnCalendar=*-*-* 02:00:00  # 每天凌晨 2 点
    Persistent=true             # 错过时间后补执行[Install]
    WantedBy=timers.target
    
  • 关联服务文件:创建同名 .service 文件(如 backup.service)定义具体任务。

4. 高级功能

4.1 分析系统启动性能

  • 查看启动耗时
    systemd-analyze                        # 总启动时间
    systemd-analyze blame                  # 各服务耗时排序
    systemd-analyze critical-chain nginx   # 服务的依赖链耗时
    

4.2 临时文件管理

  • 替代 tmpfiles.d,自动创建、清理临时目录:
    systemd-tmpfiles --create  # 立即应用配置
    

4.3 Socket 激活

  • 按需启动服务(如 SSH 仅在首次连接时启动):
    # sshd.socket 文件
    [Socket]
    ListenStream=22
    

5. 最佳实践

  1. 避免直接修改 /usr/lib/systemd/
    自定义服务文件应放在 /etc/systemd/system/
  2. 日志轮转
    配置 journald.conf 限制日志大小,防止磁盘占满。
  3. 谨慎使用 Restart=always
    可能导致崩溃服务无限重启,消耗资源。

6. 常见问题排查

  • 服务启动失败
    systemctl status <服务名>      # 查看状态和错误提示
    journalctl -xe                # 查看最近日志详情
    
  • 依赖冲突
    使用 systemctl list-dependencies 分析依赖关系。

总结

systemd 不仅是服务管理器,更是现代 Linux 系统的“管家”,涵盖日志、挂载、定时任务等核心功能。掌握其用法可大幅提升运维效率,尤其在服务部署、资源监控和故障排查场景中。

附录:常用命令速查表

命令说明
systemctl list-unit-files --type=service列出所有可用服务
systemctl mask nginx禁止服务被手动或依赖启动
systemctl kill -s SIGTERM nginx强制终止服务进程
hostnamectl set-hostname myserver修改主机名(systemd 工具链)

相关文章:

掌握 systemd:Linux 服务管理的核心工具

1. 什么是 systemd&#xff1f; 定义&#xff1a;systemd 是 Linux 系统的初始化系统&#xff08;init system&#xff09;和服务管理器&#xff0c;用于替代传统的 SysVinit。核心目标&#xff1a; 加速系统启动&#xff08;并行化任务&#xff09;。统一管理服务、日志、挂载…...

【信息系统项目管理师-案例真题】2019下半年案例分析答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一【问题 1】(6 分)【问题 2‍ 】(8 分)【问题 3‍ 】(11 分)试题二【问题 1】‍(5分)【问题 2】‍ (14 分)【问题 3‍ 】(6 分)试题三【问题 1】(8 分)【问题 2‍ 】(6 分)【问题 3】‍ (8 分)【问题 4‍ …...

C/C++程序的内存是如何开辟的?

&#x1f4ac; 欢迎讨论&#xff1a;在阅读过程中有任何疑问&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;如果你觉得这篇文章对你有帮助&#xff0c;记得点赞、收藏&#xff0c;并分享给更多对C语言感兴…...

日志结构化处理:PO对象toString日志转JSON工具

日志结构化处理&#xff1a;PO对象toString日志转JSON工具 1. 解决的问题2. 下载地址 在Java项目中&#xff0c;PO&#xff08;Plain Old Java Object&#xff09;对象遍布各个角落&#xff0c;且常常伴随着大量的日志记录需求。传统的做法是通过toString方法直接打印这些对象&…...

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…...

大疆无人机需要的kml文件如何制作kml导出(大疆KML文件)

大疆无人机需要的轨迹kml文件&#xff0c;是一种专门的格式&#xff0c;这个kml里面只有轨迹点&#xff0c;其它的属性信息都不需要。 BigemapPro提供了专门的大疆格式输出&#xff0c; 软件这里下载 www.bigemap.com 安装后&#xff0c;kml导入如下图&#xff1a; 然后选择…...

ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet

集合族谱 在这些集合中&#xff0c;仅有vector和hashtable是线程安全的&#xff0c;其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现&#xff0c;实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...

手动配置IP

手动配置IP&#xff0c;需要考虑四个配置项&#xff1a; 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址&#xff1a;格式表现为点分十进制&#xff0c;如192.168.254.1 子网掩码&#xff1a;用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…...

idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡

idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡 问题 idea编译器 安装copilot AI工具 实际操作 在 IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤如下&#xff1a; 打开 IntelliJ IDEA&#xff1a; 打开你的 IntelliJ IDEA 应用…...

游戏引擎学习第101天

回顾当前情况 昨天的进度基本上完成了所有内容&#xff0c;但我们还没有进行调试。虽然我们在运行时做的事情大致上是对的&#xff0c;但还是存在一些可能或者确定的bug。正如昨天最后提到的&#xff0c;既然现在时间晚了&#xff0c;就不太适合开始调试&#xff0c;所以今天我…...

css块级元素和行内元素区别

在CSS中&#xff0c;元素可以分为两大类&#xff1a;块级元素&#xff08;Block-level elements&#xff09;和行内元素&#xff08;Inline elements&#xff09;。这两种元素在网页布局中起着不同的作用&#xff0c;主要体现在它们的显示方式、尺寸控制、以及与其他元素的交互…...

JAVA安全—Shiro反序列化DNS利用链CC利用链AES动态调试

前言 讲了FastJson反序列化的原理和利用链&#xff0c;今天讲一下Shiro的反序列化利用&#xff0c;这个也是目前比较热门的。 原生态反序列化 我们先来复习一下原生态的反序列化&#xff0c;之前也是讲过的&#xff0c;打开我们写过的serialization_demo。代码也很简单&…...

什么是信息熵

信息熵 公式 一个离散随机变量 X X X的可能取值为 X x 1 , x 2 , . . . , x n Xx_1,x_2,...,x_n Xx1​,x2​,...,xn​&#xff0c;而对应的概率为 p i p ( X x i ) p_ip(Xx_i) pi​p(Xxi​),如下 x 1 x_1 x1​ x 2 x_2 x2​ x 3 x_3 x3​ x 4 x_4 x4​… x n x_n xn​p( x …...

使用API有效率地管理Dynadot域名,清除某一文件夹中域名的默认DNS设置

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…...

2.11 sqlite3数据库【数据库的相关操作指令、函数】

练习&#xff1a; 将 epoll 服务器 客户端拿来用 客户端&#xff1a;写一个界面&#xff0c;里面有注册登录 服务器&#xff1a;处理注册和登录逻辑&#xff0c;注册的话将注册的账号密码写入数据库&#xff0c;登录的话查询数据库中是否存在账号&#xff0c;并验证密码是否正确…...

当 LSTM 遇上 ARIMA!!

大家好&#xff0c;我是小青 ARIMA 和 LSTM 是两种常用于时间序列预测的模型&#xff0c;各有优劣。 ARIMA 擅长捕捉线性关系&#xff0c;而 LSTM 擅长处理非线性和长时间依赖的关系。将ARIMA 和 LSTM 融合&#xff0c;可以充分发挥它们各自的优势&#xff0c;构建更强大的时…...

kali连接xshell

1.先保证宿主机&#xff1a;以太网适配器 VMware Network Adapter VMnet8 和kali&#xff08;net 模式&#xff09;在同一个网段 windows VMnet8开启 查看是否是自动获取ip ipv4 和ipv6一样的 查看 windows VMnet8的IPv4的地址 查看 kali 的IP地址 window ping的结果&#xf…...

图像曲率滤波

看到这么一个非常有意思的东西&#xff0c;记录一下 https://www.zhihu.com/question/35499791 https://zhuanlan.zhihu.com/p/22971865 GCFilter_talk.pdf_免费高速下载|百度网盘-分享无限制 https://github.com/YuanhaoGong/CurvatureFilter?tabreadme-ov-file...

TCP 和 UDP 可以绑定相同的端口吗?

前言 当一个网络接口接收到一个数据报时&#xff0c;IP 模块首先检查目的地址是否为自己的 IP 地址&#xff0c;如果是的话&#xff0c;数据报交付给由 IPv4 头部的协议字段指定的协议模块。 TCP 和 UDP 在内核中是两个完全独立的模块&#xff0c;送给 TCP/UDP 模块的报文根据…...

【Python网络爬虫】爬取网站图片实战

【Python网络爬虫】爬取网站图片实战 Scrapying Images on Website in Action By Jackson@ML *声明:本文简要介绍如何利用Python爬取网站数据图片,仅供学习交流。如涉及敏感图片或者违禁事项,请注意规避;笔者不承担相关责任。 1. 创建Python项目 1) 获取和安装最新版…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...