路径或计时器单元中存在多个 Unit= 实例?

路径或计时器单元中存在多个 Unit= 实例?

systemd.path 或 systemd.timer 单元中是否可以存在多个 Unit= 实例?或者,是否必须指定路径或计时器单元的多个实例,每个实例都有一个 Unit= 实例?我无法在其他地方找到或获得任何指导。

前者显然更容易。

具体应用是让一个路径单元激活两个安装单元。

特别是,路径单元监视虚拟机的日志文件,该文件在虚拟机运行之前是安静的。挂载是虚拟机上的共享,并在主机的 fstab 条目中定义,每个条目都使用 x-systemd.requires= mount 选项来指定路径单元,以便在虚拟机启动之前不会发生挂载。跑步。这对于单一共享效果很好。

因此,更具体的问题是(a)路径单元是否知道按照指示简单地传播挂载单元,让挂载单元挂载共享,或者感到困惑并且只能传播单个挂载单元; (b) 当路径单元有许多 Unit= 指令(即,通过重新创建指定的所有安装点)时,在 fstab 中调用同一路径单元两次是否会产生冲突或错误,或者只是依赖关系的表达。

非常感谢。

答案1

man systemd.timer说:

单位=

当计时器到期时要激活的单元。参数是单位名称,其后缀不是“.timer”。如果未指定,则该值默认为与计时器单元同名的服务(后缀除外)。 (见上文。)建议激活的单元名称与定时器单元的单元名称命名相同,后缀除外。

man systemd.path同样说:

单位=

当任何配置的路径发生更改时要激活的单元。参数是单元名称,其后缀不是“.path”。如果未指定,则该值默认为与路径单元同名的服务(后缀除外)。 (参见上文。)建议激活的单元名称与路径单元的单元名称命名相同,后缀除外。

这些都不表明您可以有多Unit=行或每行有多个参数Unit=。即使您尝试并发现它有效,也不能保证它在 systemd 的未来版本中有效,因为它是未记录的行为。

因此,为需要触发的每个单位创建一个*.path/是最安全的,即使它意味着相同的或单位。您的系统上可能已经有几个单元。*.timer*.path*.timer*.timerOnCalendar=daily

老实说,如果我触及一条路径,触发两个独立的服务会有点可怕。它会引发竞争条件。您可以考虑更改服务以使用多个操作ExecStartPre=ExecStartPost=对操作进行排序,确保它们始终按确定的顺序发生。

相关内容