我正在运行多个工作实例,如本答案中所述:自动启动多个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) 我有一个Upstart任务,它基于自动启动多个upstart实例和Restarting Upstart实例进程来启动多个服务实例.它正在工作,它启动所有实例,但在它成功启动后,它只是挂起.如果我Ctrl-C出去然后用其中任何一个查看实例service status或查看ps它们都已成功启动,那么当它挂起时我不知道它正在做什么.
这是我的脚本:
description "all-my-workers"
start on runlevel [2345]
task
console log
env NUM_INSTANCES=1
env STARTING_PORT=42002
pre-start script
for i in `seq 1 $NUM_INSTANCES`;
do
start my-worker N=$i PORT=$(($STARTING_PORT + $i))
done
end script
Run Code Online (Sandbox Code Playgroud)
当我这样做时,service start all-my-workers我得到这个:
vagrant@vagrant-service:/etc/init$ sudo service all-my-workers start
Run Code Online (Sandbox Code Playgroud)
然后它只是挂在那里,并没有再提示我.正如我所说,我可以Ctrl-C看到正在运行的工人:
vagrant@vagrant-service:/etc/init$ sudo service all-my-workers status
all-my-workers start/running
vagrant@vagrant-service:/etc/init$ sudo service my-worker status N=1
my-worker (1) start/running, process 21938
Run Code Online (Sandbox Code Playgroud)
并在ps …
我最近用PHP5-FPM,Gearman和Supervisor建立了Ubuntu Natty.我编辑了我的Supervisord配置来运行Gearman工作者.
[program:gearman]
command=/usr/bin/php php_gearman_worker.php
numprocs=1
directory=/root/sandbox
stdout_logfile=/root/sandbox/supervisord.log
environment=GEARMAN_USER=gearman
autostart=true
autorestart=true
user=gearman
Run Code Online (Sandbox Code Playgroud)
这是lsof -i -P我运行supervisord之前的相关信息(仅显示gearmand和php进程):
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gearmand 29314 gearman 6u IPv4 328139 0t0 TCP localhost:4730 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
而这就是我lsof -i -P追求的时候所得到的/etc/init.d/supervisor stop && /etc/init.d/supervisor start.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gearmand 29314 gearman 6u IPv4 328139 0t0 TCP localhost:4730 (LISTEN)
gearmand 29314 gearman 11u IPv4 328206 0t0 TCP localhost:4730->localhost:39072 (ESTABLISHED)
php 29571 gearman 4u …Run Code Online (Sandbox Code Playgroud)