Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Restarting Upstart instance processes

Tags:

ubuntu

upstart

I am running multiple instances of a worker as described in this answer: Starting multiple upstart instances automatically

Question: Can I restart all instances at once?

To start my workers I can do:

initctl start my-workers

Which then allows me to do:

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

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

Is there a way to do something like this:

initctl restart my-workers

I would like to be able to restart all instances without having to know how many are running.

Here is my 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 

And 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 
like image 686
Ross Avatar asked Aug 23 '12 02:08

Ross


1 Answers

In worker.conf you just need to change this line:

stop on shutdown 

To:

stop on stopping my-workers 

And change my-workers.conf to use pre-start instead of script:

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

Now my-workers will keep state: since the work happens in pre-start, the my-workers main process won't exist and so won't exit. stop on stopping my-workers causes the workers to stop whenever my-workers is stopped. Then of course when it starts up again it will start the workers again.

(FYI, stop on shutdown does nothing, as shutdown is not a system event. man upstart-events for all the defined events) so you should also change my-workers to stop on runlevel [06]

like image 127
SpamapS Avatar answered Sep 20 '22 22:09

SpamapS