systemd 单元中的多个 ExecStartPre 覆盖文件。 systemd 保证执行顺序吗?

systemd 单元中的多个 ExecStartPre 覆盖文件。 systemd 保证执行顺序吗?

从各种来源来看,覆盖conf文件中的ExecStartPre似乎是按顺序在主服务文件之后执行的。

但这是 systemd 本身保证的吗?另外,如果 ExecStartPre 是某种 nohup 会发生什么?还是一个长期运行的过程?

答案1

man systemd.unit

除了单元文件之外,还可能存在foo.service“插入”目录 。该目录中foo.service.d/带有后缀“ .conf”的所有文件将按字母数字顺序合并,并在解析主单元文件本身后进行解析。

man systemd.service

ExecStartPre=,ExecStartPost=

分别在 中的命令之前或之后执行的附加命令ExecStart=。语法与 for 相同ExecStart=,只是允许多个命令行并且这些命令是一个接一个、串行执行的

[...]

请注意,ExecStartPre=不能用于启动长时间运行的进程。ExecStartPre=在运行下一个服务进程之前,所有由 via 调用的进程派生的进程都 将被终止。

请注意,如果在ExecStartPre=ExecStart=ExecStartPost=失败(并且不带前缀“ -”,见上文)或服务完全启动前超时,继续执行 中指定的命令,跳过ExecStopPost=中的命令。 ExecStop=[...]

所以:

但这是 systemd 本身保证的吗?

是的。

另外,如果 ExecStartPre 是某种 nohup 会发生什么?还是一个长期运行的过程?

如果超时,它将被杀死并且服务继续进行ExecStopPost

相关内容