事实:如果您用于start on <event>
作业,则您的作业可能会在每次<event>
发生时运行。这新贵食谱提到了两种只运行一次作业的方法。
第一个对我来说是合乎逻辑的,涉及创建一个在 上启动的虚拟永久运行作业<event>
。由于该虚拟作业是永久运行的且是单实例的,因此它只会启动一次,您可以start on started <dummy-job>
在实际作业中使用。
第二种方法看起来简单很多:start on startup and <event>
。这个问题的目的是理解为什么第二种方法有效。这与理解如何on start
处理由 复合的事件有关and
。即,既然<event>
发生了多次,为什么复合事件只触发一次呢?难道复合事件只有在之后才被重新触发两个都 startup
并<event>
重新触发?我正在寻找对此的确认。
答案1
我将分享我的发现,它为我的问题提供了实证答案。
我使用 2 个事件进行了测试,desktop-session-start
实际上net-device-up
,复合事件似乎desktop-session-start and net-device-up
仅在每个事件被触发时才会触发。
具体来说,在网络启动(dhcp 完成)后,我第一次登录 ubuntu 时收到该事件。然后,如果我切换网络,我就不会收到该事件。同样,如果我注销/登录,而网络保持连接,我不会收到该事件。我只有在登录时才能看到和自上次触发以来,网络一直处于关闭状态,或者类似地,当我在注销后打开接口时,自上次触发以来,网络一直处于关闭状态。
答案2
仅当 event-a 和 event-b 都已发出时,该表达式event-a and event-b
才为 true,并且如果您的作业运行,则必须再次发出两个事件才能为 true。