从各种来源来看,覆盖conf文件中的ExecStartPre似乎是按顺序在主服务文件之后执行的。
但这是 systemd 本身保证的吗?另外,如果 ExecStartPre 是某种 nohup 会发生什么?还是一个长期运行的过程?
答案1
看man systemd.unit
:
除了单元文件之外,还可能存在
foo.service
“插入”目录 。该目录中foo.service.d/
带有后缀“.conf
”的所有文件将按字母数字顺序合并,并在解析主单元文件本身后进行解析。
ExecStartPre=
,ExecStartPost=
分别在 中的命令之前或之后执行的附加命令
ExecStart=
。语法与 for 相同ExecStart=
,只是允许多个命令行并且这些命令是一个接一个、串行执行的。[...]
请注意,
ExecStartPre=
不能用于启动长时间运行的进程。ExecStartPre=
在运行下一个服务进程之前,所有由 via 调用的进程派生的进程都 将被终止。请注意,如果在
ExecStartPre=
、ExecStart=
或ExecStartPost=
失败(并且不带前缀“-
”,见上文)或服务完全启动前超时,继续执行 中指定的命令,跳过ExecStopPost=
中的命令。ExecStop=
[...]
所以:
但这是 systemd 本身保证的吗?
是的。
另外,如果 ExecStartPre 是某种 nohup 会发生什么?还是一个长期运行的过程?
如果超时,它将被杀死并且服务继续进行ExecStopPost
。