![安装 ram 驱动器后启动 systemd 服务](https://linux22.com/image/207124/%E5%AE%89%E8%A3%85%20ram%20%E9%A9%B1%E5%8A%A8%E5%99%A8%E5%90%8E%E5%90%AF%E5%8A%A8%20systemd%20%E6%9C%8D%E5%8A%A1.png)
我有一个基于 inotify 的服务,可以将 LAN 的 git 目录备份到 Dropbox。我尝试将 git 目录保留在 Dropbox 中,但我有多个 git 客户端,因此经常会在那里收到错误文件。
在开发的早期阶段,这是一个相当繁忙且繁琐的系统服务,想要登录到 RAM 驱动器。我不想使用,/tmp
因为其他应用程序依赖于那里的空间。
要在我的 fstab 中创建内存驱动器,我有以下内容:
tmpfs /mnt/ram tmpfs nodev,nosuid,noexec,nodiratime,size=1024M 0 0
我需要确保在备份服务启动之前安装内存驱动器。我想为服务设置一个延迟启动的条件。
我看到人们使用该*.mnt
服务作为先决条件的建议,但我没有看到任何文件/lib/systemd/system
提供我所需服务的名称。
我如何识别这个安装座?还有另一种方法吗?
答案1
据我了解你的情况,你已经编写了一个systemd服务文件来加载你自制的备份服务。现在您需要确保在备份服务启动之前 RAM 驱动器安装(由 /etc/fstab 中的条目定义)可用。
我自己没有这样做,我只是在手册页中查找了它。所以这可能有效,也可能无效。
根据man systemd.unit
,在“[UNIT] SECTION OPTIONS”中,有一个看起来很有前途的开关:
需要安装=
采用空格分隔的绝对路径列表。自动为访问指定路径所需的所有安装单元添加 Requires= 和 After= 类型的依赖项。
标有 noauto 的挂载点不会通过 local-fs.target 自动挂载,但仍会出于此选项的目的而受到尊重,即它们将被该单元拉入。
出于测试目的,您可以添加noauto
到您的fstab
.如果这有效,您的内存驱动器应该在重新启动后自动安装 - 如果它配置为备份服务的依赖项。
答案2
至少在 Arch 上,生成的 systemd 安装/etc/fstab
被部署到/run/systemd/generator
例如,在我的系统上,通过下面的列表,我可以将其添加到我的服务文件中
[Unit]
Description=backup logging to temp
After=mnt-ram.mount
ls -la /运行/systemd/生成器
:> ls -la
total 32
-rw-r--r-- 1 root root 362 Jun 20 17:01 -.mount
drwxr-xr-x 5 root root 260 Jun 20 17:01 .
drwxr-xr-x 22 root root 580 Jun 21 04:40 ..
-rw-r--r-- 1 root root 516 Jun 20 17:01 boot.mount
drwxr-xr-x 2 root root 120 Jun 20 17:01 local-fs.target.requires
drwxr-xr-x 2 root root 80 Jun 20 17:01 local-fs.target.wants
-rw-r--r-- 1 root root 168 Jun 20 17:01 mnt-3T.automount
-rw-r--r-- 1 root root 515 Jun 20 17:01 mnt-3T.mount
-rw-r--r-- 1 root root 168 Jun 20 17:01 mnt-4T.automount
-rw-r--r-- 1 root root 515 Jun 20 17:01 mnt-4T.mount
-rw-r--r-- 1 root root 260 Jun 20 17:01 mnt-ram.mount
-rw-r--r-- 1 root root 349 Jun 20 17:01 mnt-sda.mount
drwxr-xr-x 2 root root 80 Jun 20 17:01 remote-fs.target.requires