为啥主管总是让 celery worker 换表运行到启动?

Posted

技术标签:

【中文标题】为啥主管总是让 celery worker 换表运行到启动?【英文标题】:Why the supervisor make the celery worker changing form running to starting all the time?为什么主管总是让 celery worker 换表运行到启动? 【发布时间】:2018-06-08 21:13:27 【问题描述】:

背景

系统是Centos7,里面有一个python2.x。 1GB 内存和单核。

我安装了python3.x,我可以将python3编码成python3。

django-celery 项目基于 virtualenv python3.x,我在 nginx、uwsgi、mariadb 上做得很好。至少,我认为没有错误发生。

我尝试使用 supervisor 来控制 django-celery 的 worker,如下所示:

command=env/bin/python project/manage.py celeryd -l INFO -n worker_%(process_num)s
numprocs=4
process_name=projects_worker_%(process_num)s
stdout_logfile=logfile.log
etderr_logfile=logfile_err.log

还有关于芹菜事件,芹菜节拍的设置,这部分很好,没有发生错误。错误来自worker。

当我保持进程大于1时,它首先会运行,当我做supervisorctl status时,一切都在运行。

但是当我再次执行相同的命令查看状态时,某些进程状态会变为正在启动。

于是我尝试了更多次,我发现:worker的状态总是会从running变为starting,然后再从starting变为running——没有停止。

当我在 tmp/supervisor.log 检查主管的日志文件时,它显示如下:

exit status 1; not expected
entered runnging state,process has stayed up for > than 1 seconds(startsecs)
'project_worker_0' with pid 2284

也许它说明了为什么工人总是改变状态。

更重要的是,当我将进程更改为 1 时,worker 可能会失败。worker 的日志显示:

stale pidfile exists.Removing it

但是,我没有将 pidfile 路径添加到 worker。而且,我只是在 / 路径上找到了事件并击败了 pidfie,没有 worker 的 pidfile。另外,我尝试 find / -name *.pid 找到类似的 pidfile工人,或芹菜,但这里不存在。

问题

首先,我想部署项目,那么,这里有没有其他方法来部署 django-celery 和 virtulanev 的 celery 部分?

如果这里有人能告诉我这种现象是怎么来的,我最好选择主管来部署芹菜部分。任何人都可以帮助我吗?

PS

您的任何想法都可能对我有所帮助,祝您好运!

【问题讨论】:

【参考方案1】:

终于,我昨天晚上解决了这个问题。

关于原因

我使项目可以在windows 10系统上成功运行,但是当我将项目更改为centos7.+时没有检查。命令:env/bin/python project/manage.py celeryd 无法成功运行。所以主管会启动一个很快就会失败的进程。

为什么命令不能成功?我已经 pip 安装了所有需要的包。但它在下面显示错误:

当worker接受用pickle序列化的消息时以超级用户权限运行worker是一个非常糟糕的主意!

如果你真的想继续,那么你必须设置 C_FORCE_ROOT 环境变量(但请在做之前考虑一下)。

用户信息:uid=0 euid=0 gid=0 egid=0

我尝试搜索一些有关此错误的博客,并获得分析器:

export C_FORCE_ROOT='true' #在centos环境下

解决措施(遇到这样的错误后)

export C_FORCE_ROOT='true' 添加到centos 的环境文件并获取它。

检查命令'env/bin/python project/manage.py celeryd',是否运行成功。

重启supervisord。请注意!不是supervisorctl reload,它只是重新加载.conf 文件,而不是环境文件。尝试杀死进程supervisord -c xx.confps aux | grep supervisordkill -9 process_number,小心)。

关于博客的一些网址

the error when just run celeryd not sucess中文

【讨论】:

以上是关于为啥主管总是让 celery worker 换表运行到启动?的主要内容,如果未能解决你的问题,请参考以下文章

Celery/redis 任务并不总是完成 - 不知道为啥或如何适应它

在弹性豆茎上运行 celery-worker

CANT_REREAD: Celery 中的格式字符串.%h

Celery-Supervisor:如何重新启动主管工作以使新更新的 celery-tasks 工作?

Celery用户指引--Workers启动重启

如何理解celery中的worker并发和多worker