我们使用PHP gearman worker并行运行各种任务。一切都运行得很好,我有愚蠢的小shell脚本,当我想要它们时将它们旋转起来。作为一名程序员(因此也是懒惰的),我想看看我是否可以通过一个新手脚本来解决这些问题。
我想出了如何使用实例节,所以我可以使用实例编号启动它们:
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 on”子句自动执行此操作?
例如,启动实例1,2,3,4?然后让他们在关机时退出吗?
我想我可以将它挂钩到init.d脚本中,但我想知道upstart是否可以处理这样的事情,或者是否有人已经解决了这个问题。
干杯!
答案 0 :(得分:40)
您需要的是一个在启动时运行的引导任务,并迭代所有工作者作业,从每个作业开始。
#/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