Tag: 芹菜

芹菜工作没有在设定的时间(指定的时间)运行

问题 芹菜工作没有在规定的时间运行 情况 我曾在CentOS上工作 第一, 我开始与docker工作芹菜工作。 docker-compose up -d –build 我把$ TZ环境variables设置在Dockerfile中。 FROM python:3.4 ENV TZ=Asia/Seoul RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ADD requirements.txt . RUN pip install -U pip \ && pip install -r requirements.txt 我们也直接在python文件中设置时间。 (Celery.config.timezoneconfiguration) inst = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL']) inst.conf.timezone = 'Asia/Seoul' 但是,任务在预定的时间不工作,而是在不同的时间工作。 'schedule': crontab(minute=0, hour=4) # Intended […]

docker工的芹菜工人将得不到正确的信息经纪人

我正在使用应用程序工厂模式创build一个瓶服务,我需要使用芹菜asynchronous任务。 我也使用docker和docker构成包含和运行的一切。 我的结构如下所示: server | +– manage.py +– docker-compose.yml +– requirements.txt +– Dockerfile | +– project | | | +– api | | | +–tasks.py | | +– __init__.py 我的tasks.py文件如下所示: from project import celery_app @celery_app.task def celery_check(test): print(test) 我打电话manage.py运行,看起来像这样: # manage.py from flask_script import Manager from project import create_app app = create_app() manager = Manager(app) […]

GCP容器中可能的OOM – 如何debugging?

芹菜在GCP的docker集装箱上与Kubernetes一起运行。 它的工人最近已经开始kill -9 – 这看起来跟OOMKiller有点关系。 在kubectl get events中没有OOM事件,如果这些事件仅在一个pod已经侵入resources.limits.memory值时才会出现,那么这是事件。 所以,我的理论是,芹菜进程被杀是linux自己的OOMKiller的一个工作。 这样做没有任何意义:如果OOMKiller进入舞台,消耗的内存太多了,那么这个播客怎么可能排在第一位? (假设Kubernetes不允许在resources.limits.memory的总和超过系统可用内存量的情况下调度新的豆荚)。 但是,我不知道这些SIGKILL的其他合理原因比OOMKiller。 芹菜错误的例子(每个工人都有一个): [2017-08-12 07:00:12,124: ERROR/MainProcess] Process 'ForkPoolWorker-7' pid:16 exited with 'signal 9 (SIGKILL)' [2017-08-12 07:00:12,208: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: signal 9 (SIGKILL).',)

Docker – 芹菜作为守护进程 – 找不到pidfiles

我似乎在这里尝试了所有的解决scheme,但似乎没有任何工作,我不知道我错过了什么。 我试图通过我的docker容器运行芹菜作为守护进程。 root@bae5de770400:/itapp/itapp# /etc/init.d/celeryd status celery init v10.1. Using config script: /etc/default/celeryd celeryd down: no pidfiles found root@bae5de770400:/itapp/itapp# /etc/init.d/celerybeat status celery init v10.1. Using configuration: /etc/default/celeryd celerybeat is down: no pid file found root@bae5de770400:/itapp/itapp# 我已经看过很多关于烫发的post,我已经尝试过所有这些都无济于事。 这是我的docker文件,它创build所有的烫发和文件夹 FROM python:latest ENV PYTHONUNBUFFERED 1 # add source for snmp RUN sed -i "s#jessie main#jessie main contrib non-free#g" /etc/apt/sources.list […]

Docker容器容灾

我试图运行使用芹菜cron任务的服务,这对我们的业务非常重要。 运行芹菜的某个容器有时会意外退出,而且我也没有被通知出口。 我有两个问题: 如果我的一个容器退出,如何通过电子邮件通知我? 例如,如果该容器退出或停止另一个容器,将如何执行灾难恢复将启动并继续该退出容器的过程

docker中共享的映像卷挂载错误

我使用docker-compose在docker运行我的容器。 我有两个服务 – 其中一个celerybeat和其他web (我有很多其他人,但只考虑这些服务,因为它们包含我的问题)。 docker-compose.yml文件如下所示: . . . celerybeat: image: web-image volumes: – /home/ubuntu/celerybeat:/code/celerybeat command: > /bin/ash -c "su -m celery -c 'celery -A <application_here> beat -s /code/celerybeat/celerybeat-schedule'" web: image: web-image volumes: – /home/ubuntu/celerybeat:/code/celerybeat command: > <some_command_to_run_server> 在我的Dockerfile我添加了这些命令以获得适当的权限 RUN mkdir celerybeat RUN touch celerybeat/celerybeat-schedule RUN chown -R celery:celery celerybeat 注意:在我上面写的组合文件结构中,我已经提供了两个容器的卷装(但实际上我一次只使用一个),以免再次写组合文件 。 问题实际上只在这里。 从技术上讲,只能在celerybeat服务中提供卷装。 当我在celerybeat […]

多个Docker容器和芹菜

我们现在有如下的项目结构: 处理来自客户端的传入请求的Web服务器。 分析模块,向用户提供一些build议。 我们决定保持这些模块完全独立,并将它们移动到不同的docker集装箱。 当用户查询到达Web服务器时,它会向分析模块发送另一个查询以获取build议。 为了使build议保持一致,我们需要定期进行一些背景计算,例如,当新用户在我们的系统中注册时。 另外一些后台任务纯粹与networking服务器逻辑连接。 为此,我们决定使用分布式任务队列,例如Celery。 有以下可能的任务创build和执行情况: 任务在networking服务器上入队,在networking服务器上执行(例如,处理上传的图像) 在networking服务器上排队的任务,在分析模块中执行(例如,计算新用户的build议) 任务在分析模块中排队并在该处执行(例如,定期更新) 到目前为止,我在这里看到了使用Celery的三种可能性: 一芹菜在单独的容器,并做了一切 将芹菜移到单独的docker集装箱。 提供来自networking服务器和分析的所有必要软件包来执行任务。 与其他容器共享任务代码(或者在Web服务器和分析中声明虚拟任务) 这样,我们松散的隔离,由芹菜容器和其他容器共享的function。 II。 芹菜在单独的容器,并做得less得多 和我一样 ,但是现在的任务只是对Web服务器和分析模块的请求,它们在那里被asynchronous处理,结果在任务内部轮询,直到准备就绪。 通过这种方式,我们可以从经纪人身上获得收益,但所有繁重的计算都是从芹菜工人那里转移来的。 III。 独立芹菜在每个容器 在networking服务器和分析模块中运行Celery。 向networking服务器添加虚拟任务声明(分析任务)。 添加2个任务队列,一个用于Web服务器,一个用于分析。 这样,Web服务器上的任务就可以在分析模块中执行。 但是,仍然需要在容器上共享任务代码或使用虚拟任务,另外还需要在每个容器中运行芹菜工作人员。 什么是最好的方法来做到这一点,或逻辑应该完全改变,例如,一切都在一个容器内?

在芹菜任务完成后寻找方法和选项来停止工作进程?

问题的背景是从芹菜工人使用docker工具的一次性基础设施的angular度出发。 我正在寻找一种方法来实现以下目标: 我启动一个docker容器,启动芹菜工作者(并发) 它每个工作人员等待和接受一项任务 任务完成后员工关机[成功或失败] 所有工人都在倒闭之后,主要过程就会死亡。 我放弃了容器,并开始一个新的。

从Docker容器中的Django + Celery诊断API超时

我有一个9服务的微服务架构,每个服务运行在自己的容器中。 这些服务使用多种技术,但主要是Django,Celery(使用Redis队列),共享的PostgreSQL数据库(在自己的容器中)以及一些更具体的服务/库。 微服务通过REST API相互交stream。 问题是,有时以一种随机的方式,一些容器API不再响应,卡住了。 当我在他们的界面上发出一个curl请求时,我得到一个超时。 那一刻,所有其他的容器都回答得很好。 有两个托盘容器。 我注意到,这两个阻塞容器使用: Django的 Django的rest框架 芹菜 Django的芹菜 作为Celery broker的embedded式Redis 访问位于另一个容器中的PostgreSQL数据库 我不知道如何解决这个问题,因为没有相关的信息在服务或Docker日志中可见。 问题是这些API只是在随机时刻被卡住了。 为了使它再次工作,我需要停止阻塞容器,并再次启动。 我想知道如果这可能是一个pythonGIL问题 ,但我不知道如何检查这个假设… 任何想法如何麻烦这个?

芹菜如何发现新的节点?

我在Docker运行Celery和RabbitMQ Gunicorn。 我的问题是:我明白,芹菜是专为分布式处理。 我没有看到任何文档,假设我在同一局域网上有几台机器/节点,他们是如何发现彼此的? RabbitMQ扮演一个angular色吗? 芹菜实例是否发现彼此? 有没有合适的主机列表? 如果是这样,我该如何编辑它? 另外,假设我将只使用一个节点来处理HTTP请求,那么是否仍然需要在所有节点上运行gunicorn? 我这样问,是因为在起死回生的起动命令中,有一个工人数量的设置。 而且,该设置仅适用于该节点,还是作为所有连接节点的最大总数? 编辑:第一个答案后,我开始在这个工作。 似乎我需要某种networking设置,无论是群集还是桥接等。我应该澄清,我使用docker-compose来提出解决scheme,并且我看到正常的swarm设置不起作用,而且我如果我去那条路线,使用稍微不同的东西。 要明确一点:我需要一种方法,可以在不同的主机上添加芹菜工人,让他们能够与“主”主机进行通信,从而增加系统的能力。 如果有人可以提供一个清晰的过程来实现这个或这样的链接,这将是最有帮助的。 我希望我已经明确expression了,请让我知道如果您需要任何进一步的信息。 谢谢!