本页目录
systemd 操作手册
systemd 是 Linux 用户态的 init 系统和服务管理器。理解 unit 类型(service/timer/socket/mount)、依赖关系、日志系统和 override 机制是运维的基础。
进程查看: btm (bottom, 替代 top — CPU/内存/磁盘/温度 TUI), procs (替代 ps — 彩色, 自动列宽, 进程树)
查看状态
# 查看 unit 当前状态,含最近 10 行日志、cgroup 树、主 PID
# Active: active (running) since ... — 正在运行
# Active: inactive (dead) — 没在跑
# Active: failed — 启动失败 (看 exit code)
# 列出所有 unit,按状态过滤
# 查看 unit 是否 enabled (开机启动)
# 查看 unit 的依赖树
# 查看 unit 文件内容 (含所有 drop-in)
# 列出所有 timer 和下次触发时间
管理
# 启动/停止/重启
# 区别: reload 不中断连接,restart 会
# 如果服务不支持 reload,这个命令会失败
# mask vs disable: disable 后仍可手动 start, mask 后连手动 start 都拒绝
# 改完 unit 文件后必须执行
# 清除 failed 状态 (否则 status 一直显示 failed)
用户级服务
# 用户服务独立于系统服务: ~/.config/systemd/user/
# 用户登出后默认会停 (除非开启 lingering)
# 开启 lingering (登出后服务继续跑):
# 适用: rathole-watchdog, 本地 llama-server, 等需要常驻的用户服务
Timer
Timer 在指定时间触发对应的 service (同名 + .timer/.service 配对):
# 查看 timer 定义
# 手动触发 (不等下次)
# /etc/systemd/system/mytask.timer
[Timer]
# 上次激活后每隔 5min 触发
OnUnitActiveSec=5min
# 启动后 2min 触发首次
OnBootSec=2min
# 随机延迟 30s (避免多台机器同时跑 — thundering herd)
RandomizedDelaySec=30
# 弥补错过的触发 (如机器当时在休眠)
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/mytask.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mytask.sh
User=myuser
日志
|
# 空间管理
Override
修改 unit 配置不直接改 /usr/lib/systemd/system/ (会被包管理覆盖), 而是创建 drop-in:
# 打开编辑器创建 override
# → /etc/systemd/system/nginx.service.d/override.conf
# 或手动
注意 ExecStart= 第一行清空必须存在——不先清空的话,新的 ExecStart 是追加而非替换。
故障排查
# 服务起不来
# 分析启动瓶颈
|
# 验证 unit 文件
# 某个 unit 被 mask 了导致 WantedBy 失效
|