放置系统单元文件的最佳位置: /etc/systemd/system
只需确保在[安装]部分下添加了一个目标,请阅读“如何知道?” 有关详细信息。 UPDATE:/usr/local/lib/systemd/system
是另一个选项,请阅读“灰色区域”以获取详细信息。”
放置用户单元文件的最佳位置: /etc/systemd/user
或者,$HOME/.config/systemd/user
但这取决于权限和情况。
事实是,系统化的单位(或序言中称为“单位配置”)可以在任何地方使用-前提是您愿意进行手动符号链接,并且您知道了警告。systemctl daemon-reload
出于某些良好的原因,使将设备放置在可以找到它的地方更加容易:
- 使用标准位置意味着systemd生成器将找到它们,并使它们易于在启动时启用
systemctl enable
。这是因为您的单元将自动添加到单元相关性树(单元缓存)中。
- 您无需考虑权限,因为只有正确的特权用户才能写入指定区域。
怎么知道
以及如何确切systemctl enable
知道在哪里创建符号链接?您可以在该[install]
部分下的单元本身中对其进行硬编码。通常有一条线像
[Install]
WantedBy = multi-user.target
对应于文件系统上的预定义位置。这样,就systemctl
知道此单元依赖于一组称为的单元文件multi-user.target
(“ target”是用于指定单元依赖项组的术语。您可以使用列出所有组systemctl list-units --type target
)。要与目标一起加载的一组单位文件放在targetname.target.wants
目录中。这只是一个充满符号链接(或真实内容)的目录。如果你的[Install]
部分说,这是WantedBy
对multi-user.target
的,但如果一个符号链接它不存在的multi-user.target.wants
目录,那么它不会加载。当systemd单元生成器在引导时将单元文件添加到依赖关系树缓存中时(您可以使用手动触发生成器systemctl daemon-reload
),它会自动知道将符号链接放置在哪里(在这种情况下位于目录中)/etc/systemd/system/multi-user.target.wants/
你应该启用它。
手册重点:
可能会将其他单元从不在单元加载路径上的目录加载到systemd(“链接”)中。请参阅link命令以获取systemctl(1)。
在systemctl下,查找单位文件命令
单位文件加载路径
单位文件是从编译期间确定的一组路径中加载的,如下两张表所述。在较早列出的目录中找到的单位文件会覆盖列表中较低目录中具有相同名称的文件。
当变量$SYSTEMD_UNIT_PATH
被设置,此变量的内容覆盖单元负载路径。如果$SYSTEMD_UNIT_PATH
以空的组件(“:”)结尾,则通常的单位加载路径将附加到变量的内容中。
表1和表2 man systemd.unit
都不错。
在系统模式(--system
)中运行时加载路径。
/etc/systemd/system
本地配置
/run/systemd/system
运行时间单位
/usr/lib/systemd/system
已安装软件包的单位
在用户模式(--user
)下运行时的加载路径
每个用户单位与所有/全局用户单位之间存在差异。
取决于用户
--global
(全部用户)
适用于所有用户的单位-也意味着每个用户拥有的单位。因此,即使管理员在启动时启用了这些服务,每个用户也可以停止这些服务。
/etc/systemd/user
所有用户的本地配置(systemctl --global enable userunit.service
)
/usr/lib/systemd/user
已为所有用户在系统范围内安装的软件包单位
/run/systemd/user
运行时间单位
灰色地带
一方面,文件层次结构标准指定/etc
用于不执行二进制文件的本地配置。另一方面,它指定/usr/local/
“供本地安装软件时的系统管理员使用”。您还可以争辩(如果不仅仅是为了组织目的),所有系统单元文件都应该存在于之下/usr/local/lib/systemd/system
,但这是针对属于“软件”而不是来自程序包管理器的单元文件的。全系统范围内的相应systemd用户单元可能位于下方
/usr/local/lib/systemd/user
。
/etc/systemd/system
是您放置脚本的地方,pacman放入程序包脚本/usr/lib/systemd/system
并发出systemctl enable foo.service
创建从/usr
到的符号链接/etc
...