为啥主管总是让 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.conf
(ps aux | grep supervisord
和kill -9 process_number
,小心)。
关于博客的一些网址
the error when just run celeryd not sucess中文【讨论】:
以上是关于为啥主管总是让 celery worker 换表运行到启动?的主要内容,如果未能解决你的问题,请参考以下文章
Celery/redis 任务并不总是完成 - 不知道为啥或如何适应它
CANT_REREAD: Celery 中的格式字符串.%h