我正在按照这个答案描述的方式运行多个worker实例:Starting multiple upstart instances automatically
问题: 我能否同时重新启动所有实例?
要启动我的workers,我可以执行以下命令:
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
stop on stopping my-workers
,因此当您尝试停止已经停止的 my-workers 进程时,工作进程仍将监听它并死亡。因此,“重新启动” my-workers,即使它以前并没有真正运行,也会杀死工作进程(停止)并再次运行 pre-start 脚本(启动),从而再次生成它们。 - Mahnservice my-workers start
会挂起。Upstart文档指出:“所有作业文件必须具有exec或script stanza。”“pre-start script和post-stop script-事实上,它们不能启动进程。”也许最好只是为停止或重新启动工作程序创建另一个作业。 - Boris D. Teoharov