我正在尝试使用 systemd-tmpfiles 来管理 Azure 上 Linux (CentOS Stream 8) VM 的“临时磁盘”上的文件。配置systemd-tmpfiles
似乎是正确的,通过systemd-tmpfiles --create
在系统启动时手动运行来判断。但是,它不适用于该systemd-tmpfiles-setup
服务,因为该服务在挂载点目录而不是挂载的文件系统中创建文件。当然,这会影响整个练习。
我认为发生这种情况是因为systemd-tmpfiles-setup
在安装临时磁盘之前运行,所以我试图通过RequiresMountsFor
配置覆盖应用属性来解决它:
/etc/systemd/system/systemd-tmpfiles-setup.service.d/override.conf
[Unit]
RequiresMountsFor=/mnt/resource
Systemd 似乎认识到,通过systemctl list-dependencies systemd-tmpfiles-setup
列出适当的挂载单元来判断,但在重新启动时,它仍然会在挂载点目录而不是挂载的临时磁盘上创建所需的文件。
可能与所需的挂载单元没有明确的单元文件有关;我依靠 systemd 通过 scanning 来生成单元/etc/fstab
,就像它确实在做的那样。
/等/fstab:
# ...
/dev/disk/cloud/azure_resource-part1 /mnt/resource auto defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig 0 2
我错过了什么?我正在做的事情不应该有充分的理由吗?
当然,我一发布问题,就想出了答案。系统日志中的这些条目解释了正在发生的事情:
(未记录:sysinit.target 取决于 systemd-tmpfiles-setup.service。)
Systemd 通过忽略覆盖要求来打破循环,这是最好的。因此,如果我想使用 systemd-tmpfiles 执行此操作(我确实这样做了),那么我需要将它与
systemd-tmpfile-setup
. 我可能会添加一个单独的自定义服务。