在生产virtualenv中运行celepie作为守护进程的最佳实践是什么?我在本地环境中使用了以下方法,该方法运行良好,接收任务也按预期工作。但在生产环境中,该方法总是停留在
WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL) error
我在本地和生产中使用以下配置:
/etc/默认值/celeryd:
CELERY_BIN="path/to/celery/bin"
CELERY_APP="myproj"
CELERYD_CHDIR="home/myuser/project/myproj"
CELERYD_OPTS="--time-limit=300 --concurrency=4"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_USER="myuser"
CELERYD_GROUP="myuser"
CELERY_CREATE_DIRS=1
/etc/初始化d/celery 素d:[celeryd]
软件包和操作系统版本信息:
- Ubuntu == 16.04.2
1.celery == 4.1.0
1.家兔mq == 3.5.7
1.迪昂戈== 2.0.1
我还使用了这些命令,同时使celery 作为守护进程运行:
1.根:根/var/log/celery / - sudo chown -R根:根/变量/运行/celery /
- sudo更新-rc.d celeryd默认值
- sudo更新-rc.d celeryd已启用
- sudo /etc/初始化.d/celeryd启动
下面是我的djangosettings.pycelery 配置:
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
CELERY_TASK_SERIALIZER = 'json'
需要Maven的建议,使celery 守护进程在生产虚拟环境中正常工作。提前感谢!
4条答案
按热度按时间mlmc2os51#
除非您已经为rabbitmq创建了单独的vhost & user,否则请将CELERY_BROKER_URL设置为
amqp://guest@localhost//
此外,您应该将
/var/log/celery/
和/var/run/celery/
的所有者设置为“myuser”,而不是root,就像您在celeryd配置中设置的那样nr7wwzry2#
我猜这可能是OOM的症状。我当时在Docker容器中部署Celery后端-“它在我的机器上工作”,但在集群中不工作。我为任务分配了更多RAM,不再有这个问题。
aiazj4mn3#
我得到这个错误,由于内存不足错误捕获
/var/log/kern.log
我在一个任务中运行了Tensorflow,这需要额外的计算能力,但我的物理内存(RAM)不足以处理这么多负载。我奇怪的是,除了SigKill 9错误外,celery 中没有日志。但内核日志帮助我修复了它。
j8ag8udp4#
在docker的情况下,我只是分配了更多的资源,它的工作。