使用Supervisor运行Flower

8

我遇到了使用supervisor启动flower的挑战。

在我的开发环境中,控制台下运行以下命令是可行的:

celery --app=celery_conf.celeryapp flower --conf=flowerconfig

但是,在生产环境中使用supervisor时,我遇到了各种错误。

/supervisor/conf.d/flower.conf

[program:flower]
command=/opt/apps/venv/my_app/bin/celery flower --app=celery_conf.celeryapp --conf=flowerconfig
directory=/opt/apps/my_app
user=www-data
autostart=true
autorestart=false
redirect_stderr=true
stderr_logfile=/var/log/celery/flower.err.log
stdout_logfile=/var/log/celery/flower.out.log

使用上述配置后,没有错误,但是Celery只给我输出了一个帮助信息。就好像它没有意识到传递的变量一样。

 Type 'celery <command> --help' for help using a specific command.
 Usage: celery <command> [options]
 Show help screen and exit.
 Options:
   -A APP, --app=APP     app instance to use (e.g. module.attr_name)
   -b BROKER, --broker=BROKER
                         url to broker.  default is 'amqp://guest@localhost//'
   --loader=LOADER       name of custom loader class to use.
   etc..
   etc..
   etc...

另一方面,Supervisor抛出了INFO exited: flower (exit status 64; not expected)

我有其他由Supervisor启动的应用程序,使用celery_beat并使用github上的配置文件示例,它们与上述相同的目录路径一起工作得很好。

flowerconfig如下:

flowerconfig.py

# Broker settings
BROKER_URL = 'amqp://guest:guest@localhost:5672//'

# RabbitMQ management api
broker_api = 'http://guest:guest@localhost:15672/api/'

#Port
port = 5555

# Enable debug logging
logging = 'INFO'

解决方案:

其实并不算是一个完整的解决方案,所以我没有将它作为回答。结果证明我的虚拟环境有问题。因此我使用pip3.4删除了flower,并重新安装。需要注意的是,为了让flower使用你的flowerconfig文件,你需要在supervisor的/etc/supervisor/conf.d/flower.conf文件中添加一个director=/path/to/your/celery_config/folder/条目,否则flower将使用默认设置启动。

/etc/supervisor/conf.d/flower.conf

; ==================================
;  Flower: For monitoring Celery
; ==================================
[program:flower]
command=/opt/apps/venv/my_app/bin/celery flower --app=celery_conf.celeryapp --conf=flowerconfig
directory=/opt/apps/my_app/celery_conf #this is key as my configuration file was in the `celery_conf` folder
user=www-data
autostart=true
autorestart=false
redirect_stderr=true
stderr_logfile=/var/log/celery/flower.err.log
stdout_logfile=/var/log/celery/flower.out.log

感谢您的选择。
1个回答

2
您的主管无法找到celeryapp。也许是因为您的主管配置文件supervisor.conf在不同的路径中。
您可以向主管进程传递directory选项。这样,您就可以尝试。
[program:flower]
directory = /opt/apps/venv/my_app/
command =  celery --app=celery_conf.celeryapp flower

这是一个新的flower实例。
同时注意celery配置flower配置是不同的。

看起来你在我编辑问题的时候回答了。我想我解决了路径错误。现在,使用新配置,我只得到了 celery 的 help like 输出。请注意,我有两个目录:opt/apps/venv/my_app 是应用程序的虚拟环境,/opt/apps/my_app 是应用程序所在的位置。 - lukik
你的命令在命令行上能正常工作吗?你的flowerconfig文件里有什么内容? - Chillar Anand
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - lukik
原来虚拟环境安装出了问题。我已经发布了最终可用的配置文件。 - lukik
我在哪里可以找到 flowerconfig.py 文件? - Albin Antony
@AlbinAntony 你需要创建一个。 - Chillar Anand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接