我使用 stanza 配置了一个 Upstart 作业task
,另一个作业依赖该作业在启动之前完成。但是,该作业还必须等待另一个服务启动后才能启动。这会导致一些问题 - 如果任务在依赖作业启动之前完成,则该作业将启动,但如果任务在作业启动后完成,则该作业将不会启动。
例如,设task-a
是该作业所依赖的任务,那么这是该作业的配置文件:
start on (stopped task-a and started cups)
script
echo do stuff
end script
任务完成后,如何才能开始上述工作但另一项工作开始后?我可以根据需要修改任务,但我认为永远休眠不是一个很好的解决方案。本例中的 Ubuntu 版本是 12.04。
答案1
我会让第一份工作“发出”它自己的信号(这是一个命令):
initctl emit job-a-done
然后在我的新工作中抓住这一点......
start on started cups and job-a-done
这是食谱中概述。
答案2
好吧,经过很多尝试后,我放弃了。我尝试过:
在一个作业启动且另一个作业停止后启动该作业(一项任务)
start on (started cups and stopped my-task)
在一项工作启动并且另一项工作发出信号后启动该工作(参见 Oli 的回答)
start on (started cups and my-task-finished)
在两个作业都已启动后再启动该作业(任务作业无限期等待)
start on (started cups and started my-task)
没有任何上述尝试都成功了。作为参考,我希望在 CUPS 启动并且我的任务完成后立即启动作业。当 CUPS 配置了打印机时,它会启动缓慢,并且脚本会正确运行(在情况 1 和 3 中,2 从未正常工作)。但是,当 CUPS 没有配置任何打印机时,它会立即启动(我的意思是,WTF Upstart,为什么会发生这种情况?)但更重要的是我的工作会不是跑步。
我得出的结论是 Ubuntu 12.04 LTS 中的 Upstart 完全崩溃了。我不确定这个错误是否在 Ubuntu 的新版本中得到修复,但这是一个相当严重的问题。
所以,解决方案是。不要使用 Upstart。如果可能的话,切换到 systemd,或者在无法使用/无法维护的情况下使用 SysV。哦,还有 Canonical,请修复这个问题。