首页 > 解决方案 > 如何在 dockerized 环境中从 sh 脚本启动守护进程 celery worker

问题描述

我正在尝试从 docker 映像的入口点脚本启动 celery 守护进程。

启动.sh

#!/bin/bash

service rabbitmq-server restart 
rabbitmqctl add_user xxx
rabbitmqctl add_vhost sample_host 
rabbitmqctl set_user_tags xxx
rabbitmqctl set_permissions -p sample_host krishna ".*" ".*" ".*" 
rabbitmqctl set_user_tags xxx administrator 
service rabbitmq-server restart  
gunicorn djsr.wsgi:application  --user www-data --bind 0.0.0.0:8020 --workers 1 --timeout 120 
celery -A djsr worker -l info -Ofair &

dockerfile

RUN chmod +x /opt/app/scripts/start.sh
# start server
EXPOSE 8020
STOPSIGNAL SIGTERM
ENTRYPOINT ./scripts/start.sh

entryopint 脚本中的所有命令都被执行,除了最后一个。

如果我登录虚拟机并手动启动它,它就可以工作。

docker exec -it cdr  sh celery -A djsr worker -l info -Ofair &

我尝试在容器启动文件中添加上述脚本,但仍然无法正常工作。

我正在从 Jenkins 管道运行 docker build 和图像运行脚本。

它与命令末尾的“&”有关吗?

我知道在生产中需要将 celery 配置为服务,但对于我的应用程序来说,这目前有效。

标签: dockercelerysh

解决方案


推荐阅读