我有一个 Debian 延伸,我transmission-daemon
作为服务运行。
我将种子文件保存在安装在/mnt/external-disk
. 这个磁盘有一个ext4
文件系统,我/etc/fstab
通过 uuid 映射了它。
问题是:
当服务transmission-daemon
在启动时启动时,它不会检查外部文件系统是否已安装,因此它找不到上面的文件,并且我收到数据错误并且未播种 torrent 文件,但服务会启动。
为了解决这个问题,我检查了systemd
文档,发现缺少了什么:
文件部分中的行RequiresMountsFor=
位于下面的树中。在我将该行添加到挂载点的路径后,问题消失了,服务运行正常。如果我重新启动机器,该服务正在运行,并且文件已播种。[Unit]
transmission-daemon.service
/lib/systemd/
/mnt/external-disk
这一直有效,直到我有一个涉及apt-get dist-upgrade
包裹的地方transmission-daemon
并且在它停止之后。所以我检查了transmission-daemon.service
,我发现我所做的修改丢失了。
我RequiresMountsFor=
用正确的路径再次添加了该行,问题再次得到解决。
我的问题是:我怎样才能使这种修改持久化?
您应该使用 in 中的单位覆盖该单位
/etc
。最简单的方法是使用systemctl edit
:将打开一个编辑器并允许您创建一个覆盖片段。
覆盖片段确保考虑到对包单位(in
/lib
)的未来更改:引用将是包的单位,并在顶部应用您的覆盖。在您的情况下,您只需要使用一个.conf
文件/etc/systemd/system/transmission-daemon.service.d/
,其中仅包含部分和RequiresMountsFor
行。systemctl edit
将为您执行此override.conf
操作,在适当的位置创建一个文件。或者,您可以将整个
/lib/systemd/system/transmission-daemon.service
单元复制到/etc/systemd/system
并对其进行编辑。同样,systemctl edit
可以通过选项为您解决这个问题--full
。systemd.unit
在文档中查找“示例 2.覆盖供应商设置”以获取详细信息。将其复制到
/etc/systemd
(或 的适当子目录/etc/systemd
)并修改副本。/lib/systemd
用于打包的单元文件。当 systemd(或任何提供它们的软件包)升级时,它们将被覆盖。/etc/systemd
用于您自己的和自定义的单元文件。您放置在此处的单元文件将覆盖软件包提供的文件,并且不会在升级时被替换。