在已安装(未启动)的系统上创建 systemd 服务的“正确方法”是什么?

在已安装(未启动)的系统上创建 systemd 服务的“正确方法”是什么?

那里有很多说明创建基本的systemd服务文件,但它们似乎(理应如此)指示您拨打systemctl daemon-reloadsystemctl enable。如果您需要将服务添加到已安装但未启动的驱动器(想想系统编排),您将如何纯粹通过写入文件系统(文件、目录、符号链接)来实现这一点。

我确信会有一些“这取决于你的 X 住在哪里”,这没关系。这可能具有有限的(或没有)可移植性。我只是想确保我的计划有效。

该计划是:

  1. 写入服务文件/usr/lib/systemd/system/
  2. 到它的符号链接来自/etc/systemd/system/multi-user.target.wants/

答案1

您所建议的本质上是如何systemctl enable工作的:它在[Install]服务文件的部分中查找,并将符号链接添加到.target.wants由 指示的适当目录WantedBy=。根据手册systemd.unit,您还需要查看其他一些指令来复制systemctl它是如何实现的:

  • Alias=在与单元相同的目录中创建符号链接
  • RequiredBy=.target.requires在适当的目录中创建符号链接
  • Also=安装相关单元(查看每个链接安装的单元)
  • DefaultInstance=添加带有实例单元默认名称的符号链接(例如-> )multi-user.target.wants/[email protected][email protected]

但是,除非您安装的文件系统适用于完全不同的体系结构,否则您可能不必手动创建这些文件系统。systemctl即使当前未运行,也可以很好地安装/卸载单元文件,因此使用andsystemd应该没有问题(用于在正确的目录根目录中运行);显然你不需要运行,因为没有守护进程!我在 Gentoo 安装结束时使用此方法来添加启动单元(如和 朋友),它对我来说没有任何问题。systemctl enabledisablechrootdaemon-reloadsystemd-networkd

答案2

systemctl enable与标志一起使用--root。该标志不仅设置单元搜索文件的根目录,还指示systemctl直接对文件系统进行操作,而不是与系统守护进程通信。

相关内容