Автоматический запуск нескольких демонов сельдерея с помощью Jenkins

У меня есть сервер Ubuntu, на котором запущено 5 разных сайтов django. Они используются для тестирования, поэтому каждый разработчик имеет свой собственный сайт и базу данных, а также один сайт для интегрированного кода, который обновляется только тогда, когда функции готовы. Jenkins используется для обновления каждого сайта с Github при каждом внесении изменений в репозиторий.

Недавно мы добавили Django-Celery в наши зависимости, чтобы мы могли выполнять некоторую обработку загруженных файлов асинхронно. Каждый сайт теперь нуждается в собственной очереди сельдерея, которая использует правильные настройки (база данных, каталог загрузки и т. Д.) Для этого конкретного сайта.

Я хочу перезапускать каждый сервер сельдерея всякий раз, когда код изменяется, чтобы он мог получать последние изменения автоматически. В нашем репозитории git есть скрипт обновления, который Jenkins запускает всякий раз, когда обновляет сайт. Когда я пытаюсь запустить демона сельдерея в этом сценарии, запускается сельдерей, но он снова выключается в конце сценария.

Вот копия моего скрипта обновления:

#!/bin/bash

# Delete all *.pyc files
find $WORKSPACE -name '*.pyc' | xargs rm

# Update the database
[…]

# Run automated tests
python code/manage.py test <project> --noinput
TEST_STATUS=$?

# Refresh this repo's public website
touch $WORKSPACE/apache/wsgi.py

# Restart our celery daemon for this installation
/sbin/start-stop-daemon --stop -p $WORKSPACE/../celery.pid
echo 'Starting Celery Server'

# When run on the command line, this line starts a daemon just fine
/sbin/start-stop-daemon --start --background --quiet --oknodo -p $WORKSPACE/../celery.pid -m --exec $WORKSPACE/code/manage.py -- celeryd --logfile=$WORKSPACE/../celery.log

echo 'Celery Server Status: '$?

exit $TEST_STATUS

Вот копия журнала сельдерея во время выполнения этого сценария:

[2011-05-10 20:45:41,286: WARNING/MainProcess] -------------- celery@ip-10-227-139-6 v2.2.6
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      djkombu.transport.DatabaseTransport://guest@localhost:5672/
- ** ----------   . loader:      djcelery.loaders.DjangoLoader
- ** ----------   . logfile:     /var/lib/jenkins/jobs/mpdaugherty-farmforce/workspace/../celery.log@WARNING
- ** ----------   . concurrency: 1
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery
[2011-05-10 20:45:41,333: WARNING/MainProcess] celery@ip-10-227-139-6 has started.
[2011-05-10 20:46:28,481: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess)

Любой совет, как я могу заставить демонов сельдерея, начатых Дженкинсом, не закрываться? Большое спасибо!

1 ответ

Решение

Один из моих коллег, наконец, сделал эту работу. Вместо того, чтобы запускать демона Celery напрямую, мы используем at запланировать это немедленно и отключиться от текущей оболочки.

Вместо:

# Restart our celery daemon for this installation
/sbin/start-stop-daemon --stop -p $WORKSPACE/../celery.pid
echo 'Starting Celery Server'

# When run on the command line, this line starts a daemon just fine
/sbin/start-stop-daemon --start --background --quiet --oknodo -p $WORKSPACE/../celery.pid -m --exec $WORKSPACE/code/manage.py -- celeryd --logfile=$WORKSPACE/../celery.log

Изменить на:

# Restart our celery daemon for this installation
echo "/sbin/start-stop-daemon --stop -p $WORKSPACE/../celery.pid
echo 'Starting Celery Server'" | at now

# When run on the command line, this line starts a daemon just fine
echo "/sbin/start-stop-daemon --start --background --quiet --oknodo -p $WORKSPACE/../celery.pid -m --exec $WORKSPACE/code/manage.py -- celeryd --logfile=$WORKSPACE/../celery.log" | at now
Другие вопросы по тегам