4

5つの異なるdjangoサイトが実行されているUbuntuサーバーをセットアップしています。これらはテストに使用されるため、各開発者には独自のサイトとデータベース、および機能の準備が整ったときにのみ更新される統合コード用のサイトが 1 つあります。Jenkins は、変更がリポジトリにプッシュされるたびに Github から各サイトを更新するために使用されます。

最近、Django-Celery を依存関係に追加して、アップロードされたファイルを非同期で処理できるようにしました。各サイトには、その特定のサイトの正しい設定 (データベース、アップロード ディレクトリなど) を使用する独自のセロリ キューが必要になりました。

コードが変更されるたびに各セロリサーバーを再起動して、最新の変更を自動的に取得できるようにしたいと考えています。Jenkins がサイトを更新するたびに実行する git リポジトリ内に更新スクリプトがあります。このスクリプト内でセロリ デーモンを起動しようとすると、セロリは起動しますが、スクリプトの最後で再びシャットダウンします。

これが私の更新スクリプトのコピーです:

#!/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)

Jenkinsによって開始されたセロリデーモンをシャットダウンしないようにする方法についてのアドバイスはありますか? どうもありがとう!

4

1 に答える 1

7

私の同僚の一人がついにこの仕事をしました。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
于 2011-05-20T06:11:44.717 に答える