在我的机器(Arch linux)上,systemd-generator 生成一些单元文件,/run/systemd/generator/
它们似乎在启动时以某种方式启动。是什么让他们开始的?
例如,boot.mount
由systemd生成。systemctl list-dependencies --all
显示它已链接到local-fs.target
(未生成)。它们是如何联系在一起的?这两个单元中似乎没有任何东西可以触发 的开始boot.mount
。嗯,在 中boot.mount
,有Before=local-fs.target
,但是它不会启动服务,不是吗?
答案1
生成的单元文件不会由 systemd 自动激活。就 systemd 而言,它们没有什么特别的。每个单独的生成器都必须显式创建将生成的单元连接到目标的符号链接,以便激活目标会以正常方式通过依赖项激活生成的单元。
这利用了这样一个事实:并非单元之间的所有连接都在单元文件内表达。 Wants 和 Requires 依赖关系可以通过*.wants/
和*.requires/
子目录中的符号链接场来表达。这些符号链接场包含子目录/run/systemd/
等。
换句话说:生成器不是用 写出一个单元WantedBy=local-fs.target
,然后必须显式调用sytemctl enable
来创建符号链接(这就是启用的作用),而是使进程短路并自行创建符号链接。它使它处于一个短暂的位置,而systemctl enable
通常不会,从而防止符号链接在下次关闭后继续存在并混淆下次启动。
具体来说,您会在系统上发现/run/systemd/generator/boot.mount
从 符号链接/run/systemd/generator/local-fs.target.wants/boot.mount
。 systemd-fstab-generator
创建了这个符号链接,这使得boot.mount
通缉local-fs.target
。生成器在系统开始激活之前在引导程序中尽早运行local-fs.target
,这意味着当它确实开始激活local-fs.target
生成的依赖项时,就需要遵循。
进一步阅读
- https://unix.stackexchange.com/a/233581/5132
- 乔纳森·德博因·波拉德 (2016)。 ”
systemd.unit
手册页中缺少系统搜索路径”。systemd doco 勘误表。经常给出的答案。