Python 如何在不停止Django和docker编写的情况下运行.py服务
我创建了一个服务,检查我的许可证是否即将到期,如果符合条件,则发送电子邮件。我创建了一个manage.py命令,现在我需要保持始终运行,并在使用commando django compose启动时自动启动。我该怎么办 以下是我创建的命令:Python 如何在不停止Django和docker编写的情况下运行.py服务,python,django,docker,docker-compose,Python,Django,Docker,Docker Compose,我创建了一个服务,检查我的许可证是否即将到期,如果符合条件,则发送电子邮件。我创建了一个manage.py命令,现在我需要保持始终运行,并在使用commando django compose启动时自动启动。我该怎么办 以下是我创建的命令: from django.utils import timezone from django.core.management.base import BaseCommand, CommandError from django.core.mail import
from django.utils import timezone
from django.core.management.base import BaseCommand, CommandError
from django.core.mail import EmailMessage
from django.conf import settings
from django.template.loader import render_to_string
from datetime import datetime, timedelta
from time import sleep
from license.models import License
from license.models import Client
class Command(BaseCommand):
help = 'Email sender'
def handle(self, *args, **kwargs):
try:
""" Logic for 1 week expire or already expired and is_send=false """
client = Client.objects.all()
licenses = License.objects.all()
clients_name = []
hoje = timezone.now() - timedelta(days=7)
for date in licenses:
if hoje >= date.expiration_datetime and date.is_send is False:
clients_name.append(date.client)
#license_instance = License.objects.get(pk=date.pk)
#license_instance.is_send = True
#license_instance.save()
""" Logic for exactly 4 months """
for days in licenses:
if (timezone.now() + timedelta(weeks=16) ) == days.expiration_datetime and days.is_send is False:
clients_name.append(days.client)
license_instance = License.objects.get(pk=date.pk)
license_instance.is_send = True
license_instance.save()
""" Logic for within a month and if today is monday"""
today = timezone.now()
today = today.weekday()
todays = timezone.now()
for daily in licenses:
if today == 0:
if todays <= daily.expiration_datetime and daily.is_send is False:
clients_name.append(daily.client)
license_instance = License.objects.get(pk=date.pk)
license_instance.is_send = True
license_instance.save()
for name in clients_name:
if name in client:
license_id = []
license_id = License.objects.get(client=name)
self.stdout.write(self.style.SUCCESS(license_id.package))
template = render_to_string('html/email_template.html', {'license_id':license_id, 'name':name})
email = EmailMessage(
'The cliente license met one of the criteria',
template,
settings.EMAIL_HOST_USER,
[name.poc_contact_email],
)
email.fail_silently=False
email.send()
self.stdout.write(self.style.SUCCESS('Success.'))
except ValueError:
self.stdout.write(self.style.ERROR('None of the clients meets the criteria'))
这是我的docker-compose.yml
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db