自动启动多个新贵实例

Posted

技术标签:

【中文标题】自动启动多个新贵实例【英文标题】:Starting multiple upstart instances automatically 【发布时间】:2012-01-30 16:54:35 【问题描述】:

我们使用 php gearman workers 并行运行各种任务。一切都很好,我有愚蠢的小 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 是否可以处理这样的事情,或者是否有人发现了这个问题。

干杯!

【问题讨论】:

【参考方案1】:

您需要的是一个引导任务,它在启动时运行并遍历所有工作作业,开始每个作业。

#/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

关键是让它成为一个task,它告诉upstart让任务运行到完成,然后再为它发出任何事件。见http://upstart.ubuntu.com/cookbook/#task和http://upstart.ubuntu.com/cookbook/#instance

【讨论】:

非常感谢!我试图以类似的方式解决它,但我错过了task 位,所以循环的第一次迭代只会阻塞。惊人的。 :) 您还应该查看***.com/questions/12084025/…,它不仅可以启动多个实例,还可以停止它们。 我已经阅读了文档,但我仍然不明白,为什么除非它是一项任务,否则循环会在第一次迭代中阻塞? /cc @mkgrunder

以上是关于自动启动多个新贵实例的主要内容,如果未能解决你的问题,请参考以下文章

为啥 AWS Auto Scaling 在扩展期间会启动多个实例?

启动 Amazon EC2 实例时如何自动启动 Web 服务?

Appnium+C#+Winform自动化测试系列获取本机连接的设备启动多个Appnium和获取本机启动的Appnium

自动关闭和启动 Amazon EC2 实例

当实例被替换/终止时,自动缩放组启动的实例使用的 ebs 卷是不是被删除?

IBM zCX - 如何在 zCX 实例启动时自动启动 docker 应用程序