systemd本身不缓存服务启动逻辑或配置,所谓“清理缓存”实为三类优化:一、daemon-reload重载单元配置并reset-failed清除失败状态;二、journalctl真空清理日志或调优journald.conf;三、禁用非必要服务、延迟启动、启用socket激活及用blame/critical-chain定位瓶颈。

一、重建 systemd 单元数据库(重载配置)
当你修改了 .service、.target 或其他单元文件后,systemd 不会自动重新扫描全部配置。旧的解析结果可能仍驻留在内存中,导致新配置未生效或依赖判断不准。
- 运行 sudo systemctl daemon-reload:强制重新读取所有单元文件,重建依赖图和启动顺序
- 配合 sudo systemctl reset-failed:清除已失败服务的状态标记,避免
systemctl start因残留失败状态被拒绝 - 该操作不清理磁盘缓存,但能确保 systemd 启动决策基于最新配置
二、清理 journald 日志缓存(减少启动时日志回刷)
systemd-journald 在启动时会预加载部分日志索引,尤其当日志体积大(如 >500MB)、启用持久化存储时,会影响启动耗时。
- 限制日志大小:sudo journalctl --vacuum-size=200M(保留最近 200MB)
- 按时间清理:sudo journalctl --vacuum-time=2weeks
- 禁用启动时日志回放(可选):在 /etc/systemd/journald.conf 中设
SystemMaxUse=100M和MaxRetentionSec=2week,再执行 sudo systemctl restart systemd-journald
三、优化服务启动行为(真正提速的关键)
多数“慢启动”源于服务自身,而非 systemd。可通过 systemd 的机制抑制冗余动作:
-
禁用非必要服务:如
bluetooth.service、avahi-daemon.service、ModemManager.service,用 sudo systemctl disable --now [服务名] -
延迟启动非关键服务:在服务单元中添加
WantedBy=multi-user.target改为WantedBy=default.target,或加ExecStartPre=/bin/sleep 2避免争抢资源 -
启用 socket 激活:对网络服务(如 SSH、HTTP),用
*.socket替代直接启动*.service,实现按需加载、零预热延迟 - 检查启动瓶颈:运行 systemd-analyze blame 查看耗时最长的服务,再用 systemd-analyze critical-chain 追踪阻塞路径











