我正在运行多个工作实例,如本答案中所述:自动启动多个upstart实例
问题:我可以一次重启所有实例吗?
要开始我的工作,我可以做:
initctl启动我的工作者
然后允许我这样做:
initctl status worker N = 1 worker(1)启动/运行,进程551
initctl status worker N = 2 worker(2)start/running,process 552
有没有办法做这样的事情:
initctl重启我的工作者
我希望能够重新启动所有实例,而无需知道有多少实例正在运行.
这是我的my-workers.conf
start on stopped cloud-init
stop on shutdown
env NUM_WORKERS=4
script
for i in `seq 1 $NUM_WORKERS`
do
start worker N=$i
done
end script
Run Code Online (Sandbox Code Playgroud)
和worker.conf
stop on shutdown
chdir /path/to/current
respawn
instance $N
script
exec su -c "/home/worker/.rvm/bin/rvm-shell -c 'bundle exec rake work 2>&1 >> /var/log/worker-$N.log'" worker
end script
Run Code Online (Sandbox Code Playgroud) 我们使用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是否可以处理这样的事情,或者是否有人已经弄清楚了这个问题.
干杯啦!