systemd:如何在覆盖单元文件时清除条目

时间:2016-01-15 00:27:10

标签: systemd

我的计算机上的服务有一个默认的单元文件,用于指定[Service]部分中的[Service] PIDFile= 设置。我想清除此设置,以便不为此单元指定PID文件。

我已经创建了我的覆盖。 Systemd看到它,所以它正常工作,但我不知道我应该使用什么语法来清除设置。我在我的覆盖中试过这个:

# systemctl daemon-reload
# systemctl status myservice.service
...
Jan 14 16:15:07 host systemd[1]: [/etc/systemd/system/myservice.service.d/override.conf:1] Not an absolute path, ignoring:

但这会导致错误:

PIDFile=none

我也试过cid iid t1 t2 t3 t4 t5 4503 2 4 5 5 6 7 4503 2 7 5 3 2 8 841 2 9 2 1 5 7 2134 1 6 9 8 2 1 ,但这也会导致错误。我该如何清除此设置?

1 个答案:

答案 0 :(得分:5)

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

有关于此主题的一些信息
  

允许多次指定各种设置,其中   案例解释取决于设置。经常是多重的   设置形成一个列表,并设置为空值"重置",哪个   表示先前的分配被忽略。当这是允许的时候   在设置说明中提到。

然而,在https://www.freedesktop.org/software/systemd/man/systemd.service.htmlPIDFile指令说明中没有关于重置此值的信息,根据之前的报价意味着它无法重置。

稍后,在示例2.覆盖供应商设置部分中,提供了有关从列表中删除条目的一些信息:

  

请注意,对于插入文件,如果想要删除a中的条目   设置被解析为列表(并且不是依赖项),例如   一个人需要ConditionPathExists =(或者例如服务单元中的ExecStart =)   首先清除列表,然后重新添加除一个之外的所有条目   那将被删除。请参阅下面的示例。

引用示例(为简洁起见编辑):

原始单位:

[Unit]
(...)
AssertPathExists=/srv/webserver

Drop-in文件:

[Unit]
(...)
AssertPathExists=
AssertPathExists=/srv/www

还有以下声明:

  

请注意,依赖项(After =等)不能重置为空   list,所以只能在drop-ins中添加依赖项。如果你想   删除依赖项,您必须覆盖整个单元。