关于 Systemd

简介: Linux 系统使用 init 管理启动进程的历史已久(例如通过 sudo /etc/init.d/apache2 start 或 service apache2 start 启动服务),但传统 init 采用串行启动方式,效率较低。为解决这一问题, systemd 应运而生(名称中的d是 daemon 的缩写,表明其守护进程管理器的定位)。如今,systemd 已取代 initd,成为主流 Linux 发行版的默认主进程(PID 1)。

本文翻译自我的英文博客,最新修订内容可随时参考:关于Systemd

Linux 系统使用 init 管理启动进程的历史已久(例如通过 sudo /etc/init.d/apache2 start 或 service apache2 start 启动服务),但传统 init 采用串行启动方式,效率较低。为解决这一问题,systemd 应运而生(名称中的 d 是 daemon 的缩写,表明其守护进程管理器的定位)。如今,systemd 已取代 initd,成为主流 Linux 发行版的默认主进程(PID 1)。

一、核心组件与基本命令

1. systemctl:系统控制核心工具

sudo systemctl reboot       # 重启系统  
sudo systemctl poweroff     # 关机  
sudo systemctl suspend      # 挂起(睡眠)

2. 系统信息查询

  • hostnamectl:查看主机信息(架构、硬件、内核、操作系统等)
    hostnamectl  
    # 等价于 uname -a
    
  • timedatectl:管理时区设置
    timedatectl set-timezone Asia/Shanghai  # 设置时区为上海
    
  • loginctl:管理用户会话
    loginctl list-sessions  # 列出所有登录会话  
    loginctl list-users     # 列出所有用户
    

二、Unit(单元):systemd 的管理核心

systemd 通过 Unit 管理系统资源,共有 12 种单元类型,常见类型包括:

  • Service Unit:服务单元(如 httpd.service)
  • Target Unit:目标单元(用于分组管理,如 multi-user.target)
  • Socket Unit:套接字单元(如 ssh.socket)
  • Timer Unit:定时器单元(类似 cron 任务)

1. 单元状态管理

systemctl status bluetooth.service  # 查看服务状态  
systemctl start/stop/restart httpd.service  # 启停/重启服务  
systemctl enable/disable httpd.service  # 设置开机自启/禁用  
systemctl reload httpd.service  # 重新加载服务配置(不重启进程)

2. 单元配置文件

  • 存储路径:
    • 系统默认配置:/usr/lib/systemd/system/
    • 用户自定义配置:/etc/systemd/system/(优先级高于系统默认)
  • 符号链接机制:
    systemctl enable clamd@scan.service  # 启用服务时创建符号链接  
    # 等价于手动创建链接  
    sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'
    
  • 单元状态:
    • enabled:已启用(开机自启)
    • disabled:已禁用
    • static:静态单元(仅作为依赖,不能直接启动)
    • masked:被屏蔽(禁止启动)

3. 自定义单元配置

修改单元文件后需重新加载配置:

systemctl daemon-reload  # 重新加载 systemd 配置  
systemctl restart httpd.service  # 重启服务使配置生效

三、Target(目标):单元分组管理

Target 本质是一组单元的集合,用于实现特定系统状态(如多用户模式、图形界面模式)。常见 Target 包括:

  • default.target:默认目标(通常指向 graphical.target 或 multi-user.target)
  • multi-user.target:多用户文本模式(无图形界面)
  • graphical.target:图形界面模式
  • rescue.target:救援模式(单用户修复环境)

切换 Target:

sudo systemctl isolate multi-user.target  # 切换至多用户模式  
sudo systemctl reboot --target=rescue.target  # 重启并进入救援模式

四、日志管理:journalctl

systemd 通过 journalctl 统一管理系统日志(包括内核日志和服务日志),日志配置文件为 /etc/systemd/journald.conf。

常用命令

journalctl -k                      # 查看内核日志  
journalctl --since "2023-10-01"    # 查看从指定日期开始的日志  
journalctl -f                      # 实时追踪日志(类似 tail -f)  
journalctl _PID=1                  # 查看 PID 为 1 的进程(systemd 自身)日志  
journalctl -u httpd.service        # 查看指定服务的日志

五、systemd 与传统 init 的关键区别

特性 systemd 传统 init(如 SysVinit)
启动方式 并行启动多个服务,提升启动速度 串行启动,效率较低
进程管理 基于 PID 1 统一管理所有进程 依赖 init 进程逐个管理
单元类型 支持服务、套接字、定时器等 12 种单元 仅支持服务和运行级别(runlevel)
日志系统 集成 journalctl,统一日志管理 依赖第三方工具(如 syslog)
配置文件 使用 .service 等标准化文件格式 脚本存放在 /etc/init.d/ 目录

六、最佳实践建议

  1. 服务管理最佳实践:

    • 优先使用 systemctl enable/disable 管理开机自启,避免手动修改符号链接。
    • 自定义服务配置时,将文件放置于 /etc/systemd/system/ 目录,避免覆盖系统默认文件。
  2. 日志分析技巧:

    • 结合 journalctl 和 systemctl status 定位服务故障(如 systemctl status httpd.service 查看状态,journalctl -u httpd.service 查看详细日志)。
    • 使用过滤条件快速定位问题:
      journalctl "MESSAGE=error" --since today  # 查看今日包含"error"的日志
      
  3. 性能优化:

    • 通过 systemd-analyze 分析启动耗时:
      systemd-analyze blame  # 按耗时排序启动单元  
      systemd-analyze critical-chain  # 查看启动依赖链
      

总结

systemd 通过单元化管理、并行启动和统一日志系统,彻底改变了 Linux 系统的初始化方式。掌握 systemctl、journalctl 等核心工具及单元配置方法,是高效管理 Linux 系统的关键。如需深入学习 systemd 定时器(Timer Unit)或自定义服务开发,欢迎访问博客获取更多资源:关于Systemd。

目录
相关文章
|
存储 监控 安全
Linux内核调优的艺术:从基础到高级###
本文深入探讨了Linux操作系统的心脏——内核的调优方法。文章首先概述了Linux内核的基本结构与工作原理,随后详细阐述了内核调优的重要性及基本原则。通过具体的参数调整示例(如sysctl、/proc/sys目录中的设置),文章展示了如何根据实际应用场景优化系统性能,包括提升CPU利用率、内存管理效率以及I/O性能等关键方面。最后,介绍了一些高级工具和技术,如perf、eBPF和SystemTap,用于更深层次的性能分析和问题定位。本文旨在为系统管理员和高级用户提供实用的内核调优策略,以最大化Linux系统的效率和稳定性。 ###
|
关系型数据库 MySQL Docker
|
传感器 网络协议 Linux
DPDK如何赋能EtherCAT
DPDK如何赋能EtherCAT
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
1695 2
|
监控 算法 Linux
探索Linux中的lz4命令:高效的数据压缩工具
**探索Linux中的LZ4工具:快速数据压缩。LZ4算法提供高速压缩与解压缩,适合实时数据处理。命令行工具如`lz4c`用于文件压缩(`lz4c file.txt compressed.lz4`)和解压缩(`lz4c -d compressed.lz4 decompressed.txt`)。特点是速度快、低内存占用,可选压缩级别。注意命令的实际形式取决于安装的实现,使用前应查阅文档。**
|
机器学习/深度学习 算法 数据建模
【机器学习】类别不平衡数据的处理
【机器学习】类别不平衡数据的处理
|
监控 数据库 Docker
Zabbix监控神通数据库教程
**摘要:** 本文介绍了如何使用Docker安装和配置神舟通用数据库,并利用Zabbix进行监控。首先,通过Docker安装数据库镜像,启动容器并映射端口。接着,使用默认凭证连接数据库并验证安装。然后,将数据库的Python模块和库文件复制到主机,并安装Python3.5及相应模块,创建外部检查脚本以实现Zabbix的监控功能。示例展示了查询数据库版本的监控指标配置。最后,提到了监控结果的界面展示,并邀请读者探索更多Zabbix监控技巧。
934 0
Zabbix监控神通数据库教程
|
监控 Linux 网络安全
小白带你学习cobbler装机
小白带你学习cobbler装机
844 0
|
网络协议 Docker 容器
Docker——如何修改运行中容器的映射端口
Docker——如何修改运行中容器的映射端口
1083 0

热门文章

最新文章