我们使用PHP gearman worker并行运行各种任务。一切都很好,我有一个简单的shell脚本,可以在需要的时候启动它们。作为一个程序员(因此很懒),我想看看我是否可以通过一个upstart脚本来启动这些。
我弄清楚了如何使用实例节,所以我可以用实例号开始它们:
description "Async insert workers"
author "Mike Grunder"
env SCRIPT_PATH="/path/to/my/script"
instance $N
script
php $SCRIPT_PATH/worker.php
end script
这个很好,像这样开始:
sudo start async-worker N=1
sudo start async-worker N=2
我想使用这些工人的方式是启动一些工人(可能每个核心一个,等等),我想在启动时这样做。需要说明的是,我不需要upstart脚本来检测内核的数量。我很高兴只是说"做8个实例",但这就是为什么我想多次运行。是否有一种方法让我使用"开始"的子句在一个upstart脚本自动做到这一点?
例如,start instance 1,2,3,4 ?然后让他们在关机时正确退出?
我想我可以把它钩到init中。d脚本,但我想知道upstart是否可以处理这样的事情,或者是否有人已经解决了这个问题。
欢呼的家伙!
你需要的是一个启动任务,它在启动时运行,遍历所有的worker作业,启动每个作业。
#/etc/init/async-workers-all.conf
start on runlevel [2345]
task
env NUM_WORKERS=8
script
for i in `seq 1 $NUM_WORKERS`
do
start async-worker N=$i
done
end script
关键是让它成为一个任务,它告诉upstart在为它发出任何事件之前让任务运行到完成。参见http://upstart.ubuntu.com/cookbook/#task和http://upstart.ubuntu.com/cookbook/#instance