我们使用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
Run Code Online (Sandbox Code Playgroud)
这很好用,就像这样开始它们:
sudo start async-worker N=1
sudo start async-worker N=2
Run Code Online (Sandbox Code Playgroud)
我想要使用这些工作者的方法是调整其中的一些(可能每个核心一个等),我想在启动时这样做.要清楚,我不需要upstart脚本来检测核心数量.我很高兴只说"做8个实例",但这就是我想要多次运行的原因.有没有办法让我在upstart脚本中使用"start on"子句自动执行此操作?
例如,启动实例1,2,3,4?然后让它们在关机时正常退出?
我想我可以将它挂钩到init.d脚本中,但我想知道upstart是否可以处理这样的事情,或者是否有人已经弄清楚了这个问题.
干杯啦!
我有一个Upstart任务,它基于自动启动多个upstart实例和Restarting Upstart实例进程来启动多个服务实例.它正在工作,它启动所有实例,但在它成功启动后,它只是挂起.如果我Ctrl-C出去然后用其中任何一个查看实例service status或查看ps它们都已成功启动,那么当它挂起时我不知道它正在做什么.
这是我的脚本:
description "all-my-workers"
start on runlevel [2345]
task
console log
env NUM_INSTANCES=1
env STARTING_PORT=42002
pre-start script
for i in `seq 1 $NUM_INSTANCES`;
do
start my-worker N=$i PORT=$(($STARTING_PORT + $i))
done
end script
Run Code Online (Sandbox Code Playgroud)
当我这样做时,service start all-my-workers我得到这个:
vagrant@vagrant-service:/etc/init$ sudo service all-my-workers start
Run Code Online (Sandbox Code Playgroud)
然后它只是挂在那里,并没有再提示我.正如我所说,我可以Ctrl-C看到正在运行的工人:
vagrant@vagrant-service:/etc/init$ sudo service all-my-workers status
all-my-workers start/running
vagrant@vagrant-service:/etc/init$ sudo service my-worker status N=1
my-worker (1) start/running, process 21938
Run Code Online (Sandbox Code Playgroud)
并在ps …