
目前使用 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
命令中。