supervisor启动虚拟环境中的celery

flask项目中使用到了celery,在本机测试的话直接运行命令:celery worker -A celery_tasks.main --loglevel=info (celery_tasks.main为项目中celery目录),就可以直接运行,接下来在阿里云服务器上用supervisor来启动celery

项目中使用redis来做为broker
由于celery和redis版本之间差异可能会报错,所以虚拟环境中使用的版本号为celery==3.1.23,redis==2.10.6

配置

在/etc/supervisor/conf.d下新建配置文件 celery.conf

[program:celery]
# 命令:启动虚拟环境中的celery 并运行项目
command=/home/data/(项目名)/venv/bin/celery celery worker -A celery_tasks.main --loglevel=info
directory=/home/data/(项目名)/
user=(用户名) # root用户的话可能会报错,出问题
startsecs=1
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/celeryworker.log
stderr_logfile=/var/log/supervisor/celeryworker.log

sudo supervisorctl update 更新配置
sudo supervisorctl restart all 重启
报错:celery: ERROR (spawn error)
到底启动的时候发生了什么呢,
sudo supervisorctl tail programname stdout //查看programname的日志)该命令是动态的输出启动进程时的输出


image.png

programname: ERROR (no such process name)

找不到进程名,逐个排查,主配置supervisord.conf中已经包含了celery.conf

[include]
files = /etc/supervisor/conf.d/*.conf

配置文件celery.conf中,并没有问题

[program:celery] 

最后发现是celery.conf配置文件的问题,command启动命令有问题,启动不了,所以再次修改的配置文件如下

[program:celery]
# 注意此行命令
command=/home/data/(项目名)/venv/bin/celery worker -A celery_tasks.main --loglevel=info
directory=/home/data/(项目名)/
user=cnns
startsecs=1
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/celeryworker.log
stderr_logfile=/var/log/supervisor/celeryworker.log

查看已经启动成功


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。