2017-03-27 3 views
0

Conf DateiSellerie mit Supervisord Arbeiter arbeiten, sind nicht

[program:task1] 
    directory=/home/ubuntu/proj1 
    command=/usr/bin/python3 /usr/local/bin/celery -A proj1 worker -l info --concurrency=10 -n [email protected]%%h 
    user=ubuntu 
    numprocs=1 
    stdout_logfile=/var/log/proj1_celeryd.log 
    stderr_logfile=/var/log/proj1_celeryd.log 
    autostart=true 
    autorestart=true 
    startsecs=10 
    stopwaitsecs=600 
    priority=998 

[program:task2] 
    directory=/home/ubuntu/proj2/ 
    command=/usr/bin/python3 /usr/local/bin/celery -A proj2 worker -l info --concurrency=10 -n [email protected]%%h 
    user=ubuntu 
    numprocs=1 
    stdout_logfile=/var/log/proj2_celeryd.log 
    stderr_logfile=/var/log/proj2_celeryd.log 
    autostart=true 
    autorestart=true 
    startsecs=10 
    stopwaitsecs=600 
    priority=998 

[group:celeryworkers] 
programs=task1,task2 

proj1_worker und proj2_worker isoliert sind nicht isoliert zu werden. Zuerst wird immer proj1_worker aufgerufen, auch ich rief proj2_worker

Ich weiß nicht, wo ich falsch liege. Bitte helfen.

Vielen Dank im Voraus

+0

Welchen Broker verwenden Sie? RabbitMQ, Redis, ...? – illagrenan

+0

RabbitMQ Broker – Rahul

Antwort

1

Vor allem empfehle ich Ihnen wirklich virtualenv für jedes Projekt zu verwenden. Erstellen Sie 2 separate virtualenvs (Sie können Ihren eigenen Standort angeben), siehe https://docs.python.org/3/library/venv.html.

python3 -m venv /home/ubuntu/virtualenvs/proj1 
python3 -m venv /home/ubuntu/virtualenvs/proj2 

aktivieren virtualenv und installieren Sellerie:

source /home/ubuntu/virtualenvs/proj1/bin/activate 
pip install --upgrade celery 

source /home/ubuntu/virtualenvs/proj2/bin/activate 
pip install --upgrade celery 

Ihr Vorgesetzter Konfiguration sollte dann wie folgt aussehen:

[program:task1] 
    directory=/home/ubuntu/proj1 
    command=/home/ubuntu/virtualenvs/proj1/bin/celery worker -A proj1 -l info --concurrency=10 -n [email protected]%%h 
    # ... 

[program:task2] 
    directory=/home/ubuntu/proj2 
    command=/home/ubuntu/virtualenvs/proj1/bin/celery worker -A proj2 -l info --concurrency=10 -n [email protected]%%h 
    # ... 

Als Nächstes erstellen 2 separate virtuelle Hosts für Ihre Projekte:

rabbitmqctl add_user proj_1 <PASSWORD> 
rabbitmqctl add_vhost proj_1_vhost 
rabbitmqctl set_permissions -p proj_1_vhost proj_1 ".*" ".*" ".*" 

rabbitmqctl add_user proj_2 <PASSWORD> 
rabbitmqctl add_vhost proj_2_vhost 
rabbitmqctl set_permissions -p proj_2_vhost proj_2 ".*" ".*" ".*" 

ändern Schließlich Sellerie Konfiguration neu erstellte virtuelle Hosts zu verwenden:

app = Celery('proj1_celery_app') 
app.conf.update(
    # ... 
    broker_url='amqp://proj1:<PASSWORD>@localhost:5672/proj_1_vhost' 
    # ... 
) 

app = Celery('proj2_celery_app') 
app.conf.update(
    # ... 
    broker_url='amqp://proj2:<PASSWORD>@localhost:5672/proj_2_vhost' 
    # ... 
) 

Für weitere Informationen über Kaninchen vhosts dieses SO Beitrag sehen: Running multiple instances of celery on the same server.

+0

hey, danke für Ihre Schritt für Schritt Antwort. Arbeitet es in der Produktion? – Rahul

Verwandte Themen