首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有2个或更多副本的容器化django应用程序中运行CronJob的最佳方式是什么

在具有2个或更多副本的容器化django应用程序中运行CronJob的最佳方式是什么
EN

Stack Overflow用户
提问于 2020-10-10 19:05:59
回答 2查看 507关注 0票数 0

我正在做一个项目,这是部署在码头群作为一个服务与3个副本。如果日期已过,我想运行一个简单的管理命令来删除表中的一些行。我已经为它写了一个django命令,但希望使用cron作业使运行自动化。我确实希望确保Job每天只从我的服务的任何容器中运行一次。一些包有基于锁的方法,但它是基于文件的锁,而不是共享锁。我不想在这个简单的任务中使用芹菜。

下面是我的命令简介:

代码语言:javascript
复制
class Command(BaseCommand):
    """Command to clear user subscription if end_date has passed"""

    def handle(self, *args, **options):
        try:
            deleted_count, relative_deleted = MyModel.delete_inactive_instances()
        except Exception:
            raise CommandError('Could Not Remove Inactive Subscriptions From DB')
        else:
            self.stdout.write(self.style.SUCCESS('Successfully Removed Inactive Subscriptions %s ' % deleted_count))

我现在每天都通过docker exec运行一个命令:

代码语言:javascript
复制
python manage.py delete_inactive_instances

下面是我的docker-stack文件:

代码语言:javascript
复制
services:
  production_app:
    image: {id}.dkr.ecr.{region}.amazonaws.com/xxxxxx:latest
    expose:
      - 8000
    deploy:
      replicas: 2
    command: >
        sh -c "python manage.py migrate && gunicorn app.wsgi:application --workers 3 --bind 0.0.0.0:8000"
    env_file:
      - .prod.env

  nginx:
    image: {id}.dkr.ecr.{region}.amazonaws.com/nginx:latest
    ports:
      - 80:80
EN

回答 2

Stack Overflow用户

发布于 2020-10-11 08:52:52

你可以使用芹菜和芹菜节拍调度器。它与Django完美集成。在您的docker swarm配置中,您将添加以下服务:

  • a celery beat scheduler: 1
  • a celery worker:任意数量的副本
  • redis(用于message broker)

如果你不想在你的集群中添加额外的服务,你也可以在你的django容器中运行芹菜工人作为后台任务。节拍调度程序是控制任务何时运行的调度程序,但它们实际上是由celery工作者执行的

您可以在此项目中找到使用docker compose配置进行工作设置的示例:https://github.com/testdrivenio/django-celery-beat

作为另一种选择,您可以在堆栈配置中使用相同的映像但使用不同的入口点定义一个额外的服务:该服务将只负责运行由入口点定义的cron任务

票数 1
EN

Stack Overflow用户

发布于 2020-10-11 08:40:39

你可以使用芹菜和芹菜节拍调度器。它与Django完美集成。在您的docker swarm配置中,您将添加以下服务:

  • a celery beat scheduler: 1
  • a celery worker:任意数量的副本
  • redis(用于message broker)

如果你不想在你的集群中添加额外的服务,你也可以在你的django容器中运行芹菜工人作为后台任务。但是,您应该只运行节拍调度器的一个实例,以防止任务重复。节拍调度器是控制任务何时运行的调度器,但它们实际上是由celery工作者执行的。

您可以在此处找到docker compose配置的示例:https://github.com/testdrivenio/django-celery-beat

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64292703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档