我有任务A和工作B.以下是几个过于简单的例子。
任务a.conf
start on startup and starting job-b
console log
task
script
logger "hello"
end script
作业-b.conf
start on (runlevel [2345]
and stopped networking)
stop on starting rc RUNLEVEL=[016]
console log
script
logger "world"
end script
任务A需要在作业B开始之前运行一次。系统启动时,一切正常,任务A触发,作业B启动。但是当手动停止作业B并再次启动它时,它会永远等待。我在这里遗漏了一些东西,但是如何在作业B之前让任务A触发一次,但是如果没有任务A在另外的停止/启动操作中被任务A永久阻止?我无法更改作业B以检查任务A是否已停止。在某些实施方式中,任务A可能存在也可能不存在。
这是在Ubuntu 12.04上的最新更新。感谢。
答案 0 :(得分:0)
起始节阻止我的工作完全开始。在上面给出的示例中,job-b被阻止,直到task-a完成。不幸的是,task-a正在等待已经过去的启动事件。
解决方案是删除等待启动事件。接下来我想要task-a运行,但每次启动只需要一次。为此我添加了一个预启动脚本,检查是否存在/run/.task-a。如果没有,则任务将运行并创建/run/.task-a。任何时候job-b会再次启动,它会检查/run/.task-a然后退出,因为它存在。您还可以创建无限期运行的作业,请参阅/etc/init/network-interface-security.conf。
start on startup and starting job-b
console log
task
pre-start script
if [ -e /var/.$UPSTART_JOB ]; then
stop; exit 0
fi
end script
script
logger "hello"
end script
post-start exec touch /var/.$UPSTART_JOB