本文翻译自我的英文博客,最新修订内容可随时参考:关于Systemd
Linux 系统使用 init
管理启动进程的历史已久(例如通过 sudo /etc/init.d/apache2 start
或 service apache2 start
启动服务),但传统 init
采用串行启动方式,效率较低。为解决这一问题,systemd
应运而生(名称中的 d
是 daemon
的缩写,表明其守护进程管理器的定位)。如今,systemd
已取代 initd
,成为主流 Linux 发行版的默认主进程(PID 1)。
systemctl
:系统控制核心工具sudo systemctl reboot # 重启系统
sudo systemctl poweroff # 关机
sudo systemctl suspend # 挂起(睡眠)
hostnamectl
:查看主机信息(架构、硬件、内核、操作系统等) hostnamectl
# 等价于 uname -a timedatectl
:管理时区设置 timedatectl set-timezone Asia/Shanghai # 设置时区为上海 loginctl
:管理用户会话 loginctl list-sessions # 列出所有登录会话
loginctl list-users # 列出所有用户 systemd
通过 Unit 管理系统资源,共有 12 种单元类型,常见类型包括:
httpd.service
) multi-user.target
) ssh.socket
) systemctl status bluetooth.service # 查看服务状态
systemctl start/stop/restart httpd.service # 启停/重启服务
systemctl enable/disable httpd.service # 设置开机自启/禁用
systemctl reload httpd.service # 重新加载服务配置(不重启进程)
/usr/lib/systemd/system/
/etc/systemd/system/
(优先级高于系统默认) enabled
:已启用(开机自启) disabled
:已禁用 static
:静态单元(仅作为依赖,不能直接启动) masked
:被屏蔽(禁止启动) 修改单元文件后需重新加载配置:
systemctl daemon-reload # 重新加载 systemd 配置
systemctl restart httpd.service # 重启服务使配置生效
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(如 SysVinit) |
---|---|---|
启动方式 | 并行启动多个服务,提升启动速度 | 串行启动,效率较低 |
进程管理 | 基于 PID 1 统一管理所有进程 | 依赖 |
单元类型 | 支持服务、套接字、定时器等 12 种单元 | 仅支持服务和运行级别(runlevel) |
日志系统 | 集成 | 依赖第三方工具(如 |
配置文件 | 使用 | 脚本存放在 |
systemctl enable/disable
管理开机自启,避免手动修改符号链接。 /etc/systemd/system/
目录,避免覆盖系统默认文件。 journalctl
和 systemctl status
定位服务故障(如 systemctl status httpd.service
查看状态,journalctl -u httpd.service
查看详细日志)。 systemd-analyze
分析启动耗时: systemd-analyze blame # 按耗时排序启动单元
systemd-analyze critical-chain # 查看启动依赖链 systemd
通过单元化管理、并行启动和统一日志系统,彻底改变了 Linux 系统的初始化方式。掌握 systemctl
、journalctl
等核心工具及单元配置方法,是高效管理 Linux 系统的关键。如需深入学习 systemd 定时器(Timer Unit)或自定义服务开发,欢迎访问博客获取更多资源:关于Systemd。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。