如何覆盖 systemd 单元文件设置?

如何覆盖 systemd 单元文件设置?

我已经在我的 Arch Linux 服务器上安装了 MySQL。我将数据目录移至 /home 下的某个位置,其中安装了我的 RAID 卷。我注意到默认情况下 mysqld 不会在此配置中启动,因为 systemd 单元包含该设置ProtectHome=true

我想覆盖只是这个设置。我不想重新指定这些ExecStart或类似的命令,以防它们在软件包升级时发生变化。

我尝试在/etc/systemd/system调用处创建一个简单的文件mysqld.service,并仅添加了这些行:

[Service]
ProtectHome=false

这不起作用,因为它看起来像 /etc 中的服务取代,不覆盖系统服务。

有没有办法以这种方式覆盖 systemd 单元文件中的设置,而不直接修改 /usr/lib/systemd/system 中的文件? (这是我现在所做的临时修复,尽管如果更新包,最终会恢复)

答案1

systemctl edit将创建一个插入您可以在其中覆盖大多数设置的文件,但这些文件有一些值得一提的细节:

请注意,对于插入文件,如果想要从解析为列表(并且不是依赖项)的设置中删除条目,例如AssertPathExists=(或例如ExecStart=在服务单元中),则需要先清除列表,然后再重新设置- 添加除要删除的条目之外的所有条目。

#/etc/systemd/system/httpd.service.d/local.conf
[Unit]
AssertPathExists=
AssertPathExists=/srv/www

依赖项(After=等)无法重置为空列表,因此只能在 drop-ins 中添加依赖项。如果要删除依赖项,则必须覆盖整个单元。

要覆盖整个单元,请使用,如果还没有,systemctl edit --full这将进行复制并让您对其进行编辑。/etc

也可以看看Systemd 删除覆盖

答案2

您可以使用以下命令覆盖 systemd 单元文件

systemctl edit mysqld.service

覆盖文件中的任何语句都将优先。

相关内容