Systemd 是现代 Linux 系统中广泛使用的初始化系统和服务管理器,它替代了传统的 SysVinit。以下是关于 Systemd 管理与配置的详解:
一、Systemd 核心概念
-
单元(Unit)
Systemd 通过单元文件(Unit File)管理资源,单元类型包括:- 服务(.service):后台服务(如
nginx.service
) - 挂载点(.mount):文件系统挂载
- 设备(.device):硬件设备
- 定时器(.timer):定时任务(类似 cron)
- 套接字(.socket):网络/进程间通信
- 目标(.target):运行级别(如
multi-user.target
)
- 服务(.service):后台服务(如
-
依赖关系
Systemd 通过依赖链(Requires、Wants、Before/After)控制启动顺序。
二、常用命令
1. 服务管理
# 启动/停止/重启/重载服务
sudo systemctl start|stop|restart|reload <service>
# 查看服务状态
systemctl status <service>
# 启用/禁用开机启动
sudo systemctl enable|disable <service>
# 查看是否开机启动
systemctl is-enabled <service>
2. 系统状态
# 列出所有运行中的服务
systemctl list-units --type=service
# 列出所有单元(包括未运行)
systemctl list-units --all
# 查看系统启动耗时
systemd-analyze blame # 各服务耗时
systemd-analyze critical-chain <service> # 关键链分析
3. 日志查看(Journald)
# 查看所有日志
journalctl
# 查看指定服务的日志
journalctl -u <service>
# 实时追踪日志
journalctl -f
# 按时间筛选
journalctl --since "2023-10-01" --until "2023-10-02"
三、自定义服务配置
1. 创建服务单元文件
示例:/etc/systemd/system/myapp.service
[Unit]
Description=My Custom Application
After=network.target
[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
2. 重载配置并启用
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
3. 关键参数说明
- Type:
simple
(默认):主进程启动即视为成功。forking
:子进程 fork 后父进程退出(传统守护进程)。
- Restart:
no
(默认)、on-failure
、always
。
- EnvironmentFile:指定环境变量文件(如
/etc/default/myapp
)。
四、目标(Target)管理
-
切换运行级别
sudo systemctl isolate multi-user.target # 切换到多用户模式(无图形) sudo systemctl isolate graphical.target # 切换到图形模式
-
设置默认目标
sudo systemctl set-default multi-user.target
五、定时任务(替代 cron)
-
创建定时器单元
/etc/systemd/system/mytimer.timer
:[Unit] Description=Run myapp daily [Timer] OnCalendar=*-*-* 02:00:00 # 每天凌晨2点 Persistent=true # 错过任务后补执行 Unit=myapp.service # 关联的服务 [Install] WantedBy=timers.target
-
启用定时器
sudo systemctl enable --now mytimer.timer
六、调试与故障排除
-
模拟运行(不实际执行)
systemd-analyze verify /path/to/unit.service
-
检查依赖关系
systemctl list-dependencies <unit>
-
安全上下文(SELinux)
若服务因权限失败,检查日志并调整 SELinux 策略:audit2allow -a -M mypolicy # 生成策略模块
七、优缺点
- 优点:
- 并行启动,加速系统初始化。
- 统一管理服务、日志、挂载点等。
- 内置依赖控制和资源限制(如 CPU、内存)。
- 缺点:
- 复杂性高,学习曲线陡峭。
- 对传统脚本兼容性需额外配置。
通过掌握以上内容,你可以高效管理 Linux 系统的服务和资源。如需更深入的功能(如资源限制、沙盒配置),可参考 man systemd.resource-control
或官方文档。
(牛站网络)