当前使用 Debian 9.5 和此fstab
文件:
# /etc/fstab: static file system information.
#
/dev/mmcblk1p1 / ext4 noatime,errors=remount-ro 0 1
tmpfs /var/volatile tmpfs defaults,x-mount.mkdir 0 0
现在,如果该文件夹/var/volatile
不存在,则会创建该文件夹 ( x-mount.mkdir
)。/var/volatile/subfolder
在安装过程成功后创建子文件夹(例如)的正确方法是什么?
我希望在 systemd 继续执行其任务直至完成启动之前创建此子文件夹。
答案1
在探索了 systemd 之后,我偶然发现了一个令人惊奇的发现。事实证明,无需创建自定义服务来处理此问题,因为 systemd 已经为此提供了解决方案:systemd-tmpfiles
。它是一种管理临时目录和文件的结构化且可配置的方法。
https://www.freedesktop.org/software/systemd/man/systemd-tmpfiles.html https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html
/etc/tmpfiles.d/volatile-subfolder.conf
只需创建一个包含以下内容的文件:
d /var/volatile/subfolder 0755 root root - -
并重新加载。
答案2
解决这个问题的一种方法是创建一个新的 systemd 服务(或修改现有的服务)来/var/volatile
使用After=local-fs.target
unit 指令在 tempfs 中创建此目录。
[Unit]
Description=Tempfs initialize
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=mkdir -p /var/volatile/subfolder
[Install]
WantedBy=multiuser.target
将其添加到/etc/systemd/system/tmpfsinit
然后执行通常的systemctl daemon-reload && systemctl enable tempfsinit
.
或者,如果您已经有自定义 systemd 服务,您还可以将After
unit 指令和用于创建所需子目录的命令添加到ExecStartPre
命令中。