与主管在Ubuntu上运行芹菜任务

时间:2017-10-10 08:14:17

标签: django celery supervisord

我有一个测试Django站点使用mod_wsgi守护进程,并设置了一个简单的Celery任务来通过电子邮件发送联系表单,并安装了主管。

我知道Django代码是正确的。

我遇到的问题是,当我提交表单时,我只收到一条消息 - 第一条消息。联系表单的后续完成不会发送任何消息。

在我的服务器上,我有另一个测试站点,其中运行了配置的管理程序任务,该任务使用Django服务器(即它不使用mod_wsgi)。如果我这样做,我的任务都运行正常

sudo supervisorctl status

以下是我上面描述的任务的conf文件,该文件保存在

/etc/supervisor/conf.d

此实例中的用户名为myuser

[program:test_project]
command=/home/myuser/virtualenvs/test_project_env/bin/celery -A test_project worker --loglevel=INFO --concurrency=10 -n worker2@%%h
directory=/home/myuser/djangoprojects/test_project
user=myuser
numprocs=1
stdout_logfile=/var/log/celery/test_project.out.log
stderr_logfile=/var/log/celery/test_project.err.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

stopasgroup=true

; Set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first.
priority=1000

我的其他测试网站将此设置为命令 - note worker1 @ %% h

command=/home/myuser/virtualenvs/another_test_project_env/bin/celery -A another_test_project worker --loglevel=INFO --concurrency=10 -n worker1@%%h

我显然做错了,因为我的表单只提交了。如果我查看上面提到的out.log文件,我只看到第一个任务,其他表单提交没有任何内容。

非常感谢提前。

更新

我在上午8点23分(格林威治标准时间)提交了第一份表格,然后如上所述,此后不久又发布了另一份表格,其中没有创建任务。在完成问题之后,我在9.15再次提交了表单,为此创建了一个任务并收到了消息!然后我再次提交了表单,但没有再创建任务。希望这有帮助!

1 个答案:

答案 0 :(得分:0)

使用ps auxf|grep celery查看您开始的工人数量,如果您之前有任何其他工作人员并且您没有杀死它,您之前创建的工作人员将使用该任务,导致您每两个或三次(或更多次)只收到一个任务。

你需要停止芹菜:

sudo supervisorctl -c /etc/supervisord/supervisord.conf stop all
每次

,并在supervisord.conf中设置:

stopasgroup=true             ; send stop signal to the UNIX process group (default false)

否则会导致内存泄漏和常规任务丢失。

如果您有多django站点,这里是RabbitMQ的演示支持: 你需要添加rabbitmq vhost并将用户设置为vhost:

sudo rabbitmqctl add_vhost {vhost_name}
sudo rabbitmqctl set_permissions -p {vhost_name} {username} ".*" ".*" ".*"

和不同的站点使用不同的vhost(但可以使用相同的用户)。 将此添加到您的django settings.py:

BROKER_URL = 'amqp://username:password@localhost:5672/vhost_name'

这里有一些信息:

  

Using celeryd as a daemon with multiple django apps?

     

Running multiple Django Celery websites on same server

     

Run Multiple Django Apps With Celery On One Server With Rabbitmq VHosts

     

Run Multiple Django Apps With Celery On One Server With Rabbitmq VHosts

相关问题