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

Linux小课堂: systemd核心功能详解

systemd概述与进程管理


systemd 是几乎所有最新Linux发行版采用的初始化系统(也称初始化进程服务)
systemd 作为现代 Linux 发行版的初始化系统(进程号 PID=1),通过事件驱动机制实现进程并行启动与精细依赖管理。与传统 SystemV 的串行启动相比,其核心优势包括:

  1. 并行初始化:消除进程启动顺序阻塞
  2. 进程守护能力:自动重启因错误停止的进程
  3. 统一管理范式:整合系统日志、外设、挂载点等资源管理
  4. Unit 抽象模型:将系统资源抽象为可配置单元, 通过 systemctl 命令操作单元,单元类型包括服务(service)、挂载点(mount)、设备(device)等
  5. 基于事件驱动:支持进程并行启动,精细管理依赖关系(对比 System V 的串行启动)
  6. 自愈能力:可自动重启因错误停止的进程,并集成日志、外设管理等功能

验证命令:ps -aux | grep systemd 显示 PID=1 及子进程树

与传统的 System V(串行启动进程)不同,systemd基于事件驱动,支持并行启动进程,可精细管理依赖关系,并能自动重启因错误停止的进程,它通过一组命令管理系统和进程,核心工具是 systemctlcontrol的简写)

服务管理实战:以Samba为例


1 ) 安装与启停服务

# 安装Samba服务 
yum -y install samba # 启动服务 
systemctl start smb.service # 验证状态 
systemctl status smb.service  # 显示active (running)
ps aux | grep smb             # 查看进程 # 停止服务 
systemctl stop smb.service    # 状态变为inactive (dead)

关键命令:

  • start/stop/restart:控制服务状态
  • status:检查服务活动状态(active 或 inactive)

2 ) 服务操作命令总结

操作命令效果
启动服务systemctl start <服务名>激活服务
停止服务systemctl stop <服务名>终止服务
查看状态systemctl status <服务名>显示运行状态
重启服务systemctl restart <服务名>重新加载配置并重启

单元Unit机制与配置管理


文件位置:

  • 默认路径:/usr/lib/systemd/system/(如 smb.service

Unit(单元) 是systemd管理的对象实体,分为多种类型:

  • Service:守护进程(如smb.service
  • Mount:文件系统挂载点
  • Target:多个Unit的逻辑组(替代System V运行级别)
  • Socket:进程间通信套接字

关键操作:

列出所有活动Unit(默认命令)
systemctl list-units 过滤Service类型Unit 
systemctl list-units --type=service 查看Unit配置文件 
systemctl cat smb.service          # 路径:/usr/lib/systemd/system/smb.service 安全编辑配置(生成重载文件)
systemctl edit smb.service         # 使用nano编辑器,按Ctrl+X退出 强制覆盖原始配置(慎用!)
systemctl edit --full smb.service 重载守护进程配置 
systemctl daemon-reload 

注意:

  • 编辑后必须执行 daemon-reload 使配置生效
  • 重载文件(/etc/systemd/system/)优先级高于原始文件(/usr/lib/systemd/system/
  • 重载文件优先级高于默认配置,删除重载文件可恢复初始状态

Target与运行级别

Target 替代了System V的运行级别(Runlevel),允许多个Target同时激活:

System V 运行级别systemd Target功能
0poweroff.target关机
1 (单用户模式)rescue.target无网络,仅root用户
3,4 (多用户命令行)multi-user.target标准服务器模式
5 (图形界面)graphical.target图形桌面环境
6reboot.target重启
emergencyemergency.target紧急救援模式

操作命令:

查看当前默认Target 
systemctl get-default            # 示例输出:multi-user.target 切换到单用户模式 Target 
systemctl isolate rescue.target 设置默认启动Target 
systemctl set-default graphical.target 列出所有Target类型Unit 
systemctl list-units --type=target 查看依赖关系 
systemctl list-dependencies graphical.target 

日志与启动分析


1 ) 日志管理(journalctl)

# 查看所有日志(按时间排序)
journalctl # 仅显示本次启动后的日志 
journalctl -b # 查看内核日志(等同dmesg)
journalctl -k # 过滤特定服务的日志 
journalctl -u smb.service 

2 ) 启动耗时分析(systemd-analyze)

# 显示总启动时间 
systemd-analyze                 
# 输出示例:Startup finished in 33.415s (kernel:1.224s, userspace:25.118s)# 按耗时排序Unit启动时间 
systemd-analyze blame           # 列出耗时最高的Unit(如NetworkManager-wait-online.service)

3 ) 优化启动速度

# 禁止服务开机自启 
systemctl disable <服务名># 示例:禁用高耗时服务 
systemctl disable networkmanager-wait-online.service # 强制禁用服务(创建符号链接到/dev/null)
systemctl mask <服务名>          # 慎用!会阻止所有激活操作 
# 示例
systemctl mask servicename.service # 解除强制禁用 
systemctl unmask <服务名>
systemctl unmask servicename.service

Node.js 调用 systemd(NestJS + TypeScript)


1 ) 方案1

创建 systemd Unit 文件
/etc/systemd/system/nest-app.service

[Unit]
Description=NestJS Production Server 
After=network.target [Service]
User=nodeuser 
Group=nodegroup 
WorkingDirectory=/opt/nest-app 
ExecStart=/usr/bin/node /opt/nest-app/dist/main.js 
Restart=always 
Environment=NODE_ENV=production 
TimeoutStopSec=10 [Install]
WantedBy=multi-user.target 

TypeScript 守护进程实现

// src/main.ts - 添加进程异常处理 
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);await app.listen(3000);// 进程异常捕获(符合 systemd 重启策略)process.on('uncaughtException', (err) => {console.error('[SYSTEMD] Process exception:', err);process.exit(1);});process.on('unhandledRejection', (reason) => {console.error('[SYSTEMD] Unhandled rejection:', reason);});
}
bootstrap();

服务部署命令

重载 Unit 配置 
sudo systemctl daemon-reload 设置开机自启 
sudo systemctl enable nest-app.service 启动服务 
sudo systemctl start nest-app.service 查看实时日志 
journalctl -u nest-app.service -f 

2 )方案2

示例

import { Injectable } from '@nestjs/common';
import { execSync } from 'child_process';@Injectable()
export class SystemdService {// 执行 systemctl 命令 executeCommand(command: string, unit: string): string {try {return execSync(`systemctl ${command} ${unit}`, { encoding: 'utf-8' });} catch (error) {throw new Error(`执行失败: ${error.stderr}`);}}// 示例:管理 Samba 服务 manageSamba(action: 'start' | 'stop' | 'restart' | 'status'): string {return this.executeCommand(action, 'smb.service');}// 获取启动耗时报告 analyzeBootTime(): string {return execSync('systemd-analyze blame', { encoding: 'utf-8' });}
}

代码说明:

  • 通过 execSync 调用 systemd 命令,封装启动、停止、状态查询等功能
  • 错误处理:捕获命令执行异常(如权限不足或服务不存在)

总结

1 ) systemd 通过 systemctl 管理 Unit(服务、挂载点等),支持并行启动和依赖精细控制
2 ) Target 取代 System V运行级别,支持多目标并行激活(如multi-user.target
3 ) 日志工具

  • journalctl 提供按服务、内核等维度的日志过滤
  • systemd-analyze 用于启动性能优化

4 ) 关键配置目录:

  • 原始Unit文件:/usr/lib/systemd/system/
  • 自定义重载文件:/etc/systemd/system/

5 )最佳实践:

  • 优先使用 edit 而非 edit --full 避免配置丢失
  • 禁用非必要服务时,先用 disable 再考虑 mask
  • 日志筛选结合 -u-b 快速定位问题

参考资料:

  • systemd 单元类型详解

  • systemd 单元文件语法详见 systemd.unit(5) 手册页

  • 单元配置文件语法:man systemd.unit

重要提示:修改Unit配置后必须执行 systemctl daemon-reload,强制禁用服务(mask)可能导致系统异常,需谨慎操作

http://www.dtcms.com/a/533447.html

相关文章:

  • 专做网站wordpress 图像滑块插件
  • 郑州知名做网站中国市场网
  • 【技术深度】腾讯 IM 接入规范文档(基于区块链交易所 APP)
  • 什么是区块链?有哪些场景需要用到?
  • 该如何选择深圳网站建设公司菏泽网站建设公司
  • 基于AI Agent的数据资产自动化治理实验
  • Rust 并发编程进阶:线程模型、通道通信与异步任务对比分析
  • 南京一站式工程装饰装修网站做网站建设的名声很差吗
  • 三型布局的网站兴义网站网站建设
  • LangChain最详细教程之Model I/O(三)Output Parsers
  • 网站制作 万网营销型网站建设设计服务
  • 做网站前端用什么语言网站建设是什么专业
  • Photoshop - Photoshop 工具栏(17)铅笔工具
  • sem竞价托管多少钱搜索引擎优化的内容有哪些
  • 合肥营销网站建设价格网站策划的工作要求
  • Diffusion Planner(1): 论文解读
  • 怎样做pdf电子书下载网站网站建设合同贴花算哪一类
  • 交互设计精髓斜杠青年seo工作室
  • 网站添加字体c 网站开发 调试
  • JAVA面试汇总(五)数据库(三)
  • 企业网站设计教程宝安logo设计
  • 网站建设与管理t7372wordpress 编辑图像
  • PCAM数据集上面验证CNN CNN+AutoEncoder TL-CNN效果差异与比较
  • 正规的高端网站制作公司开发区高级中学
  • React 07
  • 空间怎么上传网站seo的英文全称是什么
  • 架构师的生存法则
  • 兰州网站排名外包个人简历word文档模板
  • 大麦网网站内似网站开发广州营销型网站建设公司
  • AI 应用层革命(三)——智能文明的经济结构与社会秩序