2013-09-28 1 views
1

Я хотел бы использовать Beanstalkd в моем процессе развертывания. Идея аналогична той, которую использует IGN (https://github.com/ign/brood). В любой момент времени я могу запустить два клиента, чтобы загрузить последний код и перезапустить Apache. Возможно ли, чтобы несколько сотрудников (по одному на каждом клиенте) обрабатывали одну и ту же очередь? В качестве обходного пути я мог создать очередь для каждого клиента.Beanstalkd - Несколько рабочих, получающих доступ к одной очереди

ответ

0

Определенная очередь для каждого клиента, используемая для команд для этого клиента. Попросите всех прослушать их собственную очередь и отправьте простое сообщение «RESTART» как можно большему числу клиентов.

У меня был бы скрипт bash, который запустил работу, и продолжал ее выполнять, выполняя фактический перезапуск. You сценария нужно только

  1. удалить сообщение «RESTART» (в противном случае он будет получать такое же сообщение в следующий раз)
  2. exit(90); сценарий

Возвращаемое значение подхватывается баш сценарий, и действие выполняется.

#!/bin/bash 

# runBeanstalkd-worker.sh 

# a shell script that keeps looping until an exit code is given 
# if it does an exit(0), restart after a second - or if it's a declared error 
# if we've restarted in a planned fashion, we don't bother with any pause 
# and for one particular code, exit the script entirely. 
# The numbers 97, 98, 99 must match what is returned from the PHP script 

nice php -q -f ./cli-beanstalk-worker.php -- [email protected] 
ERR=$? 

## Possibilities 
# 90 - restart apache 
# 97 - planned pause/restart 
# 98 - planned restart 
# 99 - planned stop, exit. 
# 0  - unplanned restart (as returned by "exit;") 
#  - Anything else is also unplanned paused/restart 

# 90 - restart apache 
if [ $ERR -eq 90 ] 
then 
    service apache restart 
    sleep 5; 
    exec $0 [email protected]; 
fi 

if [ $ERR -eq 97 ] 
then 
    # a planned pause, then restart 
    echo "97: PLANNED_PAUSE - wait 1"; 
    sleep 1; 
    exec $0 [email protected]; 
fi 

#### other actions, like planned-restart, or shutdown 

# unplanned exit, pause, and restart 
echo "unplanned restart: err:" $ERR; 
echo "sleeping for 1 sec" 
sleep 1 

exec $0 [email protected]