批量导出linux服务器开机自启服务需完整捕获.service文件、启用状态、依赖关系、环境变量及启动顺序;执行systemctl list-unit-files筛选已启用服务,用systemctl cat导出配置,systemctl show提取environment,list-dependencies --reverse --all分析依赖链,并通过diff和find验证完整性。

要批量导出 Linux 服务器上所有开机自启的服务配置,关键不是只导出“启用状态”,而是完整捕获服务单元文件(.service)、其启用状态、依赖关系、运行时环境及实际生效的配置项。以下方法适用于 systemd 系统(CentOS 7+/RHEL 8+/Ubuntu 16.04+ 等主流发行版):
导出所有已启用服务的单元文件
这些是真正决定服务如何启动的核心配置:
- 扫描
/etc/systemd/system/下软链接(用户自定义启用的服务) - 扫描
/usr/lib/systemd/system/或/lib/systemd/system/中被systemctl enable激活的原始单元(通过systemctl list-unit-files --type=service --state=enabled可定位)
执行命令:
mkdir -p ./backup/services-enabled
systemctl list-unit-files --type=service --state=enabled --no-pager | awk '{print $1}' | while read svc; do
systemctl cat "$svc" 2>/dev/null | sed '/^#/d' > "./backup/services-enabled/${svc}.service"
done
✅ 说明:
systemctl cat输出带注释的完整单元内容;sed '/^#/d'清除注释行可减小体积(如需保留注释请删掉该段)。
同时导出服务的实际环境变量
/etc/environment 或 ~/.bashrc 中的变量对 systemd 服务不生效,必须单独抓取每个启用服务当前加载的环境:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
mkdir -p ./backup/services-env
systemctl list-unit-files --type=service --state=enabled --no-pager | awk '{print $1}' | while read svc; do
systemctl show --property=Environment --no-pager "$svc" 2>/dev/null | grep -v "^Environment=" | sed 's/^ *//; s/ *$//' > "./backup/services-env/${svc}.env"
done
⚠️ 注意:空输出表示该服务未显式设置
Environment=,默认继承系统级环境(如PATH),还原时需确保目标机/etc/systemd/system.conf中DefaultEnvironment=设置一致。
补充:导出服务依赖与启动顺序信息
仅靠 .service 文件有时不足以复现行为,尤其涉及 WantedBy=、RequiredBy= 或 After= 关系:
systemctl list-dependencies --reverse --all --no-pager multi-user.target | grep '\.service$' > ./backup/services-dependencies.txt
该命令列出所有以 multi-user.target 为终点的反向依赖链,覆盖绝大多数常规服务。
验证导出完整性的小技巧
导出后快速检查是否遗漏关键服务:
- 对比启用列表:
diff - 检查是否有
.service文件为空:find ./backup/services-enabled -size 0
不复杂但容易忽略。










