我有一个 Debian 扩展,我transmission-daemon
作为服务运行。
我将种子文件保存在安装在/mnt/external-disk
.该磁盘有一个文件系统,我通过 uuidext4
映射它。/etc/fstab
问题是:
当服务transmission-daemon
在引导时启动时,它不会检查外部文件系统是否已安装,因此找不到其上的文件,并且我收到数据错误,并且 torrent 文件未播种,但服务启动。
为了解决这个问题,我检查了systemd
文档,发现缺少什么:
文件部分RequiresMountsFor=
中的行位于下面的树中。在我添加该行与安装点的路径后,问题消失了并且服务工作正常。如果我重新启动机器,服务就会正常工作,并且文件会被播种。[Unit]
transmission-daemon.service
/lib/systemd/
/mnt/external-disk
这一直有效,直到我找到了涉及apt-get dist-upgrade
包的地方并在它停止之后。transmission-daemon
于是我检查了一下transmission-daemon.service
,发现我所做的修改丢失了。
我RequiresMountsFor=
再次使用正确的路径添加了该行,问题再次得到解决。
我的问题是:如何才能使这个修改持久化?
答案1
您应该使用 中的单位覆盖该单位/etc
。最简单的方法是使用systemctl edit
:
sudo systemctl edit transmission-daemon
将打开一个编辑器并允许您创建覆盖片段。
覆盖代码片段可确保考虑到包单位的未来更改(在 中/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
。
在中查找“示例 2. 覆盖供应商设置”systemd.unit
文档了解详情。
答案2
将其复制到/etc/systemd
(或适当的子目录/etc/systemd
)并修改副本。
/lib/systemd
用于打包的单元文件。当 systemd (或提供它们的任何软件包)升级时,它们将被覆盖。
/etc/systemd
适用于您自己的和定制的单元文件。您放置在此处的单元文件将覆盖包提供的文件,并且在升级时不会被替换。