安装 ram 驱动器后启动 systemd 服务

安装 ram 驱动器后启动 systemd 服务

我有一个基于 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

相关内容