当前位置: 首页>>技术教程>>正文


ubuntu – 重新启动Upstart实例进程

,

问题描述

我正在按照此答案中的说明运行一个工作程序的多个实例:Starting multiple upstart instances automatically

问题:是否可以立即重新启动所有实例?

要开始我的工人,我可以做:

initctl start my-workers

然后,我可以这样做:

initctl status worker N=1 worker (1) start/running, process 551

initctl status worker N=2 worker (2) start/running, process 552

有没有办法做这样的事情:

initctl restart my-workers

我希望能够重新启动所有实例,而不必知道有多少实例在运行。

这是我的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

和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

最佳思路

worker.conf中,您只需要更改以下行:

stop on shutdown

至:

stop on stopping my-workers

并将my-workers.conf更改为使用pre-start而不是script

pre-start script
  for i in `seq 1 $NUM_WORKERS`
  do
    start worker N=$i
  done
end script

现在,my-workers将保持状态:由于工作发生在pre-start中,因此my-workers主进程将不存在,因此不会退出。每当my-workers停止时,stop on stopping my-workers会使工作人员停止。当然,当它再次启动时,它将再次启动工作程序。

(FYI,stop on shutdown不执行任何操作,因为shutdown不是系统事件。对于所有已定义的事件,都是man upstart-events),因此还应该将my-workers更改为stop on runlevel [06]

次佳思路

我从上面的示例和SpamapS答案中进行了尝试,得到了:

init: my-workers pre-start process (22955) terminated with status 127

/var/log/upstart/my-workers.log中,我发现了问题:

/proc/self/fd/9: 6: /proc/self/fd/9: end: not found

my-workers.conf中的for-loop的end似乎是错误的语法。我更换了

script
  for i in `seq 1 $NUM_WORKERS`
    do
      start worker N=$i
    done
  end
end script

script
  for i in `seq 1 $NUM_WORKERS`
  do
    start worker N=$i
  done
end script

而且有效!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8155.html,未经允许,请勿转载。