systemd-preset 是用于批量保存和恢复服务启用状态的工具。其核心用途包括:在部署或迁移时统一服务启停策略、备份当前服务状态、快速还原配置。操作步骤为:1. 使用 systemctl 命令导出已启用服务并生成 .preset 文件;2. 将文件保存至 /etc/systemd/system-preset/ 目录;3. 在目标系统上复制该文件并执行 systemd-preset –now apply 进行还原。注意事项包括:/etc 下的配置优先级高于 /usr/lib,可使用通配符匹配服务,避免修改默认文件以防升级覆盖,需手动处理服务模板实例。
在linux系统中,如果你需要批量保存或恢复systemd服务的启用/禁用状态,比如在迁移服务器或者重建环境时,systemd 自带的 systemd-preset 工具就非常实用。它能帮助你把当前服务的 preset 状态保存下来,并在其他系统上快速还原。
下面是一些实际操作建议和使用技巧:
什么是 systemd-preset?
systemd-preset 是 systemd 提供的一个命令行工具,用于根据预设规则决定哪些单元(unit)应该被启用或禁用。这些规则通常存储在 /usr/lib/systemd/system-preset/ 和 /etc/systemd/system-preset/ 目录下的 .preset 文件中。
它的典型用途包括:
- 在部署新系统时快速设置默认启用的服务
- 统一多个服务器之间的服务启停策略
- 备份当前系统的服务启用状态以便后续恢复
如何保存当前服务状态为 preset 文件?
你可以通过以下步骤将当前已启用或禁用的服务导出为一个 .preset 文件:
-
列出所有启用的服务:
systemctl list-unit-files --type=service --state=enabled
-
生成 preset 文件内容(手动方式):
可以写个小脚本自动提取这些服务名并加上 enable 指令,例如:
systemctl list-unit-files --type=service --state=enabled | awk '{print $1}' | grep -v "@" | xargs -I {} echo "enable {}"
-
保存为 .preset 文件:
把输出保存到 /etc/systemd/system-preset/your-config.preset 中,这样优先级更高。
-
应用新的 preset 设置(可选):
systemd-preset --root=/ apply
如果你在当前系统上运行,可以省略 –root=/。
如何在新系统中还原服务配置?
当你有了之前保存的 .preset 文件,可以在新系统中执行以下操作来还原服务启停状态:
-
将 .preset 文件复制到目标系统的 /etc/systemd/system-preset/ 目录下。
-
执行应用命令:
sudo systemd-preset --now apply
加上 –now 表示立即生效,否则只更新配置不触发动作。
注意:某些服务可能依赖特定软件包或配置文件,确保目标系统已安装相关组件。
常见问题与注意事项
- 优先级问题:/etc/systemd/system-preset/ 下的配置会覆盖 /usr/lib/systemd/system-preset/ 的内容。
- 通配符支持:可以在 .preset 文件中使用通配符,例如 enable *.service 来匹配一组服务。
- 不推荐直接修改原始 preset 文件:最好新建一个自己的 .preset 文件,避免升级后被覆盖。
- 服务模板(@xxx.service)处理:这类服务不会被默认列出,如果要启用实例,需显式指定,如 enable sshd@myinstance.service。
基本上就这些。掌握了 systemd-preset 的使用方法,你就可以更高效地管理和备份 Linux 系统中的服务启停状态了。