如何对 .service 进行修改并保持其持久性?

如何对 .service 进行修改并保持其持久性?

我有一个 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适用于您自己的和定制的单元文件。您放置在此处的单元文件将覆盖包提供的文件,并且在升级时不会被替换。

相关内容