我正在寻找如何管理只读文件系统上 systemd 服务的启用和禁用的策略。这是不可能的,因为 multi-user.target.wants 目录内容被修改。
将 /etc/systemd/system 作为服务的默认位置,是否有人尝试过管理启动“表”/multi-user.target.wants 目录的方法,以便在目标上运行的应用程序或脚本仍然可以启用或禁用即使文件系统是 RO,也可以指定特定的服务(或多个服务)?
我曾考虑将 multi-user.target.wants 目录符号链接到小型 rw“config”分区上的某个位置,并根据需要在启动/重新启动时在预设的 multi-user.target.wants 目录之间切换。或者,我认为脚本或应用程序可以通过添加或删除条目来直接修改此符号链接位置。
我还没有测试过;我想看看是否有人有这方面的经验,可能的策略,或者知道更标准化的方法?谢谢。
答案1
不是完整的答案,但评论的细节太多。
要进行更改,您需要对该文件系统的写访问权限。我猜您现在拥有写入访问权限,但您希望将其锁定为只读,同时仍能够在以后进行这些更改。
systemd
将在多个位置搜索/run
非只读的单元路径。您可能有机会很早就加载服务并在以下加载路径之一中创建/编辑一些单元:
参考:https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Unit%20File%20Load%20Path
小路 | 描述 |
---|---|
/etc/systemd/system.control | 使用 dbus API 创建持久和瞬态配置 |
/run/systemd/system.control | ” |
/运行/systemd/瞬态 | 瞬态单元的动态配置 |
/run/systemd/generator.early | 具有高优先级的生成单元(请参阅 systemd.generator(7) 中的 Early-dir) |
/etc/systemd/系统 | 管理员创建的系统单位 |
/运行/systemd/系统 | 运行时单位 |
/运行/systemd/生成器 | 具有中等优先级的生成单元(请参阅 systemd.generator(7) 中的 normal-dir) |
/usr/local/lib/systemd/系统 | 管理员安装的系统单元 |
/usr/lib/systemd/系统 | 由分发包管理器安装的系统单元 |
/run/systemd/generator.late | 生成的低优先级单元(请参阅 systemd.generator(7) 中的 Late-dir ) |
您可以编写一个在启动过程中很早就运行的应用程序,该应用程序连接到命令中心的套接字,获取单元指令,然后使用 dbus-API 在中创建单元/run/systemd/system.control
另一种选择是编写一个生成器。看systemd.生成器(7)了解详情。生成器是由 systemd 在引导过程早期(加载单元文件之前)执行的程序。这些生成器预计会在/run/systemd/generator/
.那将在您的只读文件系统之外。
生成器的一个示例是systemd-fstab-generator
读取/etc/fstab
并生成本机 systemd*.mount
单元。