如何修改 .service 并保持它的持久性?

D'A*_*der 12 systemd

我有一个 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=用正确的路径再次添加了该行,问题再次得到解决。

我的问题是:如何使这种修改持久化?

Ste*_*itt 19

您应该使用 中的单位覆盖该单位/etc。最简单的方法是使用systemctl edit

sudo systemctl edit transmission-daemon
Run Code Online (Sandbox Code Playgroud)

将打开一个编辑器并允许您创建一个覆盖片段。

覆盖片段可确保将包单位(in /lib)的未来更改考虑在内:引用将是包的单位,您的覆盖应用在顶部。在你的情况下,你需要使用的只是一个.conf文件 in /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. 覆盖供应商设置”以获取详细信息。