2011-05-11 21 views
4

私は5つの異なるdjangoサイトが実行されているUbuntuサーバーをセットアップしています。これらはテストに使用されるため、各開発者は独自のサイトとデータベースだけでなく、機能の準備が完了したときに更新される統合コード用のサイトもあります。 Jenkinsは、変更がリポジトリにプッシュされるたびに、Githubから各サイトを更新するために使用されます。Jenkinsを使って自動的に複数のセロリのデーモンを起動する

私たちは最近、依存関係に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] -------------- [email protected] v2.2.6 
---- **** ----- 
--- * *** * -- [Configuration] 
-- * - **** --- . broker:  djkombu.transport.DatabaseTransport://[email protected]:5672/ 
- ** ---------- . loader:  djcelery.loaders.DjangoLoader 
- ** ---------- . logfile:  /var/lib/jenkins/jobs/mpdaugherty-farmforce/workspace/../[email protected] 
- ** ---------- . concurrency: 1 
- ** ---------- . events:  OFF 
- *** --- * --- . beat:  OFF 
-- ******* ---- 
--- ***** ----- [Queues] 
-------------- . celery:  exchange:celery (direct) binding:celery 
[2011-05-10 20:45:41,333: WARNING/MainProcess] [email protected] has started. 
[2011-05-10 20:46:28,481: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess) 

私はセロリデーモンを取得する方法について何かアドバイスジェンキンスがシャットダウンしないように始めた?どうもありがとう!

答えて

7

私の同僚のうちの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 
+0

これは本当に頭痛から私を救いました。しかし、誰もこの "今のところ"の作品が元のバージョンはなぜ動作しないのか説明できますか? – timop

関連する問題