我正在运行一个工人的多个实例,如此答案中所述:
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
现在我的工人将保持状态:由于工作发生在pre-start,my-workers主进程不会存在,所以不会退出。停止停止我的工人导致工人停止每当我的工人停止。当然,当它再次启动它将再次启动工人。
(FYI,停止在关闭什么也不做,因为关闭不是一个系统事件。所有定义的事件的人upstart事件)所以你也应该改变我的工人停止运行级别[06]