flask項(xiàng)目中使用到了celery治笨,在本機(jī)測試的話直接運(yùn)行命令:celery worker -A celery_tasks.main --loglevel=info (celery_tasks.main為項(xiàng)目中celery目錄)植兰,就可以直接運(yùn)行丽蝎,接下來在阿里云服務(wù)器上用supervisor來啟動(dòng)celery
項(xiàng)目中使用redis來做為broker
由于celery和redis版本之間差異可能會(huì)報(bào)錯(cuò)稳诚,所以虛擬環(huán)境中使用的版本號為celery==3.1.23,redis==2.10.6
配置
在/etc/supervisor/conf.d下新建配置文件 celery.conf
[program:celery]
# 命令:啟動(dòng)虛擬環(huán)境中的celery 并運(yùn)行項(xiàng)目
command=/home/data/(項(xiàng)目名)/venv/bin/celery celery worker -A celery_tasks.main --loglevel=info
directory=/home/data/(項(xiàng)目名)/
user=(用戶名) # root用戶的話可能會(huì)報(bào)錯(cuò)霎桅,出問題
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 重啟
報(bào)錯(cuò):celery: ERROR (spawn error)
到底啟動(dòng)的時(shí)候發(fā)生了什么呢巾钉,
sudo supervisorctl tail programname stdout //查看programname的日志)該命令是動(dòng)態(tài)的輸出啟動(dòng)進(jìn)程時(shí)的輸出
programname: ERROR (no such process name)
找不到進(jìn)程名瘫镇,逐個(gè)排查沽一,主配置supervisord.conf中已經(jīng)包含了celery.conf
[include]
files = /etc/supervisor/conf.d/*.conf
配置文件celery.conf中,并沒有問題
[program:celery]
最后發(fā)現(xiàn)是celery.conf配置文件的問題盖溺,command啟動(dòng)命令有問題,啟動(dòng)不了铣缠,所以再次修改的配置文件如下
[program:celery]
# 注意此行命令
command=/home/data/(項(xiàng)目名)/venv/bin/celery worker -A celery_tasks.main --loglevel=info
directory=/home/data/(項(xiàng)目名)/
user=cnns
startsecs=1
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/celeryworker.log
stderr_logfile=/var/log/supervisor/celeryworker.log
查看已經(jīng)啟動(dòng)成功