我正在开发一个项目,该项目作为具有 3 个副本的服务部署在 docker swarm 上。如果日期已过,我想运行一个简单的管理命令从表中删除一些行。我已经为它编写了一个 django 命令,但是想使用 cron 作业使运行自动化。我确实想确保作业每天仅从属于我的服务的任何容器运行一次。在互联网上,我发现了一些为 Django 应用程序运行 cron 作业而构建的包,但它们都没有考虑多个容器。一些包有基于锁的方法,但它是基于文件的锁而不是共享锁。我不想用芹菜来完成这个简单的任务。
以下是我的命令的一瞥:
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 运行一个命令:
python manage.py delete_inactive_instances
以下是我的 docker-stack 文件:
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