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

你可能感兴趣的:(supervisor启动虚拟环境中的celery)